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()