sqlite驱动操作sqlite数据库,datagrip的jdbc java驱动操作mysql。所有我们要找python操作mysql驱动
驱动选择:
- MySQLDB。已经有C驱动mysql的成熟包,Mysqldb包python对这个C驱动包封装。优点效率高,py2环境和众多项目中使用。
pip install MySQL-python
缺点:windows下pip安装报错(因为pypi中压根没有这个包)。可以去网上找对应平台编译后的.whl安装(也可能出错)。最终解决去mysql官方下载对应平台的connector.msi安装。 - (推荐)pymysql。纯python写的。缺点效率稍低。优点方便安装,完全兼容mysqldb的语法。市场占有越来越高。
- pip install mysql-connector。python书写,类似MySQLdb但不依赖C语言驱动。
import pymysql.cursors
connection = pymysql.connect(
host='127.0.0.1',
port=3306,
user='root',
password='123456', # 安全风险,未来会从环境变量读取
db='test',
charset='utf8mb4', # 可以省略, 8.0客户端默认utf-8可以省略,5.x最好带上。 eg:AttributeError: 'NoneType' object has no attribute 'encoding'
cursorclass=pymysql.cursors.DictCursor # 返回字典格式的结果集。不写返回默认元组格式。
)
# cursor = connection.cursor()
# cursor.execute()
# cursor.fetchone()
# cursor.close()
# connection.close()
try:
with connection.cursor() as cursor:
sql = """ SELECT * FROM shirt; """
cursor.execute(sql)
result = cursor.fetchall()
print(result)
for row in result:
if row['owner'] == 1:
print('小明有一件{}色的{}'.format(row['color'], row['style']))
# with connection.cursor() as cursor:
# sql = """ INSERT INTO shirt values (%s, %s, %s, %s)"""
# affected_rows = cursor.execute(sql, (None, '裙子', '绿', 2))
# print(affected_rows)
# connection.commit()
with connection.cursor() as cursor:
sql = """ update shirt set color='红' where style='外套' and owner=1"""
sql1 = cursor.execute(sql)
print(sql1)
connection.commit()
except Exception as e:
print(e)
finally:
connection.close()