Pymysql

zenopan發表於2024-05-31

Pymysql

  1. 安裝:pip install pymysql

  2. 匯入模組:import pymysql

  3. 建立連線物件:

    1. conn = pymysql.connect(user=root,password='',host='localhost',database='',port=3306,charset='',cursorclass= DictCursor)#cursorclass不指定返回結果就是元組,Dictcursor結果就是字典形式的。
  4. 建立遊標物件:cursor = conn.cursor()

  5. 檢視資料:

    1. 建立sql語句:sql ='select * from * where*;'
    2. 執行sql語句:cursor.execute(sql)
    3. 獲取sql語句執行結果,結果拿完一個少一個:
    4. 獲取全部結果:result = cursor.fetchall()
    5. 獲取一條結果:result = cursor.fetchone()#多次獲取會依次往下
    6. 獲取n條結果:result = cursor.fetchmany(n)
    7. 移動游標:
      1. cursor.scroll(1,'relative')相對移動
      2. cursor.scroll(1,'absolute')絕對移動
  6. 插入資料:

    1. 直接用sql語句
      1. 建立語句:sql ='insert into table() values();'
      2. 執行語句:cursor.execute(sql)
      3. 提交事務:
        1. 主動提交:conn.commint()
        2. 自動提交:建立物件時引數設定
    2. 格式化傳入引數
      1. 建立佔位語句:sql='insert into table() values(%s,%s);'
      2. 執行語句傳入資料:cursor.execute(sql,[v1],[v2])
    3. 關鍵字傳入引數
      1. 建立關鍵字佔位語句:sql='insert into table() values(%(k1)s,%(k2)s);'
      2. 執行語句傳入資料:cursor.execute(sql,[k1:v1,k2:..],[k1:..,k2:..])
    4. 批次插入資料
      1. 遍歷資料插入:[cursor.execute(sql,data) for data in data_all]
      2. 一次性批次插入資料:cursor.executemany(data_all)
  7. 刪除資料

    1. 直接用sql語句
      1. 建立語句:sql ='delete from table() where ;'
      2. 執行語句:cursor.execute(sql)
      3. 提交事務:
        1. 主動提交:conn.commint()
        2. 自動提交:建立物件時引數設定
    2. 格式化傳入引數
      1. 建立佔位語句:sql='delete from table() where (%s,%s);'
      2. 執行語句傳入資料:cursor.execute(sql,[v1],[v2])
    3. 關鍵字傳入引數
      1. 建立關鍵字佔位語句:sql='delete from table() where (%(k1)s,%(k2)s);'
      2. 執行語句傳入資料:cursor.execute(sql,[k1:v1,k2:..],[k1:..,k2:..])
  8. 更新資料

    1. 直接用sql語句
      1. 建立語句:sql ='update table set * where* ;'
      2. 執行語句:cursor.execute(sql)
      3. 提交事務:
        1. 主動提交:conn.commint()
        2. 自動提交:建立物件時引數設定
    2. 格式化傳入引數
      1. 建立佔位語句:sql='update table set * where* (%s,%s);'
      2. 執行語句傳入資料:cursor.execute(sql,[v1],[v2])
    3. 關鍵字傳入引數
      1. 建立關鍵字佔位語句:sql='update table set * where*(%(k1)s,%(k2)s);'
      2. 執行語句傳入資料:cursor.execute(sql,[k1:v1,k2:..],[k1:..,k2:..])
  9. SQL隱碼攻擊問題

    1. 現象:輸入內容——容易與註釋符——混淆導致程式碼失效,資料注入
    2. 解決辦法:使用官方的關鍵字傳值方式
      1. sql = 'select * from t where f=%(f)s'
      2. cursor.execute(sql)

相關文章