共计 2533 个字符,预计需要花费 7 分钟才能阅读完成。
安装 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) | |
connection.commit() | |
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())) | |
connection.commit() | |
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) | |
connection.commit() | |
print('-------------- 删除表 --------------') | |
cursor.execute(drop_table_sql) | |
connection.commit() | |
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())) | |
connection.commit() |
这样,SQL 操作就更安全了。如果需要更详细的文档参考 PyMySQL 文档吧。不过好像这些 SQL 数据库的实现还不太一样,PyMySQL 的参数占位符使用 %s
这样的 C 格式化符,而 Python 自带的 sqlite3 模块的占位符好像是?
。因此在使用其他数据库的时候还是仔细阅读文档吧。
本文永久更新链接地址:http://www.linuxidc.com/Linux/2017-06/144690.htm
正文完
星哥玩云-微信公众号