Pymysql
zenopan發表於2024-05-31
Pymysql
-
安裝:pip install pymysql
-
匯入模組:import pymysql
-
建立連線物件:
- conn = pymysql.connect(user=root,password='',host='localhost',database='',port=3306,charset='',cursorclass= DictCursor)#cursorclass不指定返回結果就是元組,Dictcursor結果就是字典形式的。
-
建立遊標物件:cursor = conn.cursor()
-
檢視資料:
- 建立sql語句:sql ='select * from * where*;'
- 執行sql語句:cursor.execute(sql)
- 獲取sql語句執行結果,結果拿完一個少一個:
- 獲取全部結果:result = cursor.fetchall()
- 獲取一條結果:result = cursor.fetchone()#多次獲取會依次往下
- 獲取n條結果:result = cursor.fetchmany(n)
- 移動游標:
- cursor.scroll(1,'relative')相對移動
- cursor.scroll(1,'absolute')絕對移動
-
插入資料:
- 直接用sql語句
- 建立語句:sql ='insert into table() values();'
- 執行語句:cursor.execute(sql)
- 提交事務:
- 主動提交:conn.commint()
- 自動提交:建立物件時引數設定
- 格式化傳入引數
- 建立佔位語句:sql='insert into table() values(%s,%s);'
- 執行語句傳入資料:cursor.execute(sql,[v1],[v2])
- 關鍵字傳入引數
- 建立關鍵字佔位語句:sql='insert into table() values(%(k1)s,%(k2)s);'
- 執行語句傳入資料:cursor.execute(sql,[k1:v1,k2:..],[k1:..,k2:..])
- 批次插入資料
- 遍歷資料插入:[cursor.execute(sql,data) for data in data_all]
- 一次性批次插入資料:cursor.executemany(data_all)
-
刪除資料
- 直接用sql語句
- 建立語句:sql ='delete from table() where ;'
- 執行語句:cursor.execute(sql)
- 提交事務:
- 主動提交:conn.commint()
- 自動提交:建立物件時引數設定
- 格式化傳入引數
- 建立佔位語句:sql='delete from table() where (%s,%s);'
- 執行語句傳入資料:cursor.execute(sql,[v1],[v2])
- 關鍵字傳入引數
- 建立關鍵字佔位語句:sql='delete from table() where (%(k1)s,%(k2)s);'
- 執行語句傳入資料:cursor.execute(sql,[k1:v1,k2:..],[k1:..,k2:..])
-
更新資料
- 直接用sql語句
- 建立語句:sql ='update table set * where* ;'
- 執行語句:cursor.execute(sql)
- 提交事務:
- 主動提交:conn.commint()
- 自動提交:建立物件時引數設定
- 格式化傳入引數
- 建立佔位語句:sql='update table set * where* (%s,%s);'
- 執行語句傳入資料:cursor.execute(sql,[v1],[v2])
- 關鍵字傳入引數
- 建立關鍵字佔位語句:sql='update table set * where*(%(k1)s,%(k2)s);'
- 執行語句傳入資料:cursor.execute(sql,[k1:v1,k2:..],[k1:..,k2:..])
-
SQL隱碼攻擊問題
- 現象:輸入內容——容易與註釋符——混淆導致程式碼失效,資料注入
- 解決辦法:使用官方的關鍵字傳值方式
- sql = 'select * from t where f=%(f)s'
- cursor.execute(sql)