1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > python propresql mysql_Python中操作mysql的pymysql模块详解

python propresql mysql_Python中操作mysql的pymysql模块详解

时间:2020-08-28 12:26:38

相关推荐

python propresql mysql_Python中操作mysql的pymysql模块详解

PyMySQL是一个Python编写的MySQL驱动程序,让我们可以用Python语言操作MySQL数据库。

首先,使用pip安装PyMySQL。

pip install PyMySQL

使用PyMySQL

简单使用

如果有JDBC等其他语言的数据库学习经验的话,使用PyMySQL非常简单。下面是一个完整的MySQL增删查(没有改)的例子。

import pymysql

import datetime

host = 'localhost'

username = 'root'

password = '12345678'

db_name = 'test'

create_table_sql = """\

CREATE TABLE fuck(

id INT AUTO_INCREMENT PRIMARY KEY,

username VARCHAR(255) UNIQUE ,

nickname VARCHAR(255) NOT NULL ,

birthday DATE

)

"""

insert_table_sql = """\

INSERT INTO fuck(username,nickname,birthday)

VALUES('{username}','{nickname}','{birthday}')

"""

query_table_sql = """\

SELECT id,username,nickname,birthday

FROM fuck

"""

delete_table_sql = """\

DELETE FROM fuck

"""

drop_table_sql = """\

DROP TABLE fuck

"""

connection = pymysql.connect(host=host,

user=username,

password=password,

charset='utf8mb4',

db=db_name)

try:

with connection.cursor() as cursor:

print('--------------新建表--------------')

cursor.execute(create_table_sql)

mit()

print('--------------插入数据--------------')

cursor.execute(

insert_table_sql.format(username='yitian', nickname='易天', birthday=datetime.date.today()))

cursor.execute(

insert_table_sql.format(username='zhang3', nickname='张三', birthday=datetime.date.today()))

cursor.execute(

insert_table_sql.format(username='li4', nickname='李四', birthday=datetime.date.today()))

cursor.execute(

insert_table_sql.format(username='wang5', nickname='王五', birthday=datetime.date.today()))

mit()

print('--------------查询数据--------------')

cursor.execute(query_table_sql)

results = cursor.fetchall()

print(f'id\tname\tnickname\tbirthday')

for row in results:

print(row[0], row[1], row[2], row[3], sep='\t')

print('--------------清除数据--------------')

cursor.execute(delete_table_sql)

mit()

print('--------------删除表--------------')

cursor.execute(drop_table_sql)

mit()

finally:

connection.close()

如果需要更详细的资料,请查阅pymysql文档或者其他资料。

防止SQL注入

在上面的例子中直接拼接字符串,这不是好办法,因为可能存在SQL注入攻击,更好的解决办法是使用类库提供的函数来传参。所以上面的代码也需要稍作修改。

首先,将带参数的SQL语句改写。

insert_table_sql = """\

INSERT INTO fuck(username,nickname,birthday)

VALUES(%s,%s,%s)

"""

然后将相应的执行代码也进行修改,execute函数接受一个元组作为SQL参数。所以代码改写为这样。

print('--------------插入数据--------------')

cursor.execute(insert_table_sql, ('yitian', '易天', datetime.date.today()))

cursor.execute(insert_table_sql, ('zhang3', '张三', datetime.date.today()))

cursor.execute(insert_table_sql, ('li4', '李四', datetime.date.today()))

cursor.execute(insert_table_sql, ('wang5', '王五', datetime.date.today()))

mit()

这样,SQL操作就更安全了。如果需要更详细的文档参考PyMySQL文档吧。不过好像这些SQL数据库的实现还不太一样,PyMySQL的参数占位符使用%s这样的C格式化符,而Python自带的sqlite3模块的占位符好像是?。因此在使用其他数据库的时候还是仔细阅读文档吧。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。