Python pymsql模塊的使用
基本使用
首先要下載 pymysql
pip install pymsql
以下是 pymysql 的基本使用
import pymysql
# 鏈接,C/S架構(gòu),TCP鏈接
conn = pymysql.connect(
host="localhost",
database="db1",
charset="utf8mb4",
user="root",
cursorclass=pymysql.cursors.DictCursor, # 記錄結(jié)果,字典顯示
# password = "your password",
)
# 游標
cursor = conn.cursor()
# 執(zhí)行sql
sql = "show tables"
res = cursor.execute(sql) # 提交執(zhí)行,返回sql影響成功的行數(shù)
print(res) # 2 代表該數(shù)據(jù)庫下有2個表
print(cursor.fetchall()) # [{'Tables_in_db1': 't1'}, {'Tables_in_db1': 't2'}]
cursor.close() # 關(guān)閉游標
conn.close()
游標概念
可以看到在上面的示例中有一個游標的概念,其實這個也非常簡單,就等同于光標的上下移動,每移動一次代表一條記錄。

在 pymsql 中,對于 select 等操作返回的結(jié)果都可以通過游標的移動配合相應(yīng)方法函數(shù)來進行讀取。
sql注入
如果你的某些 sql 語句要進行字符串拼接,那么一定要使用 pymysql 提供的 execute() 方法進行拼接,不要去用 python 中的 % 或 format() 方法,這可能導(dǎo)致出現(xiàn) sql 注入問題帶來不安全的隱患。
注意:使用 execute() 時,不可傳入表名,數(shù)據(jù)庫名。否則會拋出語法錯誤,這是因為在拼接時會自動添加上``號
import pymysql
# 鏈接
conn = pymysql.connect(
host="localhost",
database="db1",
charset="utf8mb4",
user="root",
cursorclass=pymysql.cursors.DictCursor, # 記錄結(jié)果,字典顯示
# password = "your password",
)
# 游標
cursor=conn.cursor()
# 執(zhí)行sql
sql = "select * from t1 where id=%s"
res = cursor.execute(sql,("1",)) # 提交執(zhí)行,返回sql影響成功的行數(shù) 這里拼接能預(yù)防sql注入問題
print(res) # 1 查出一條記錄
print(cursor.fetchall()) # 拿到所有記錄的結(jié)果
cursor.close() # 關(guān)閉游標
conn.close()
事務(wù)提交
在執(zhí)行 UPDATE/INSERT/DELETE 之類的操作,必須使用 conn.commit() 進行事務(wù)提交后方可生效。
或者你可以在實例化 conn 對象時為他指定 auto_commit 參數(shù)為 true 即可自動提交事務(wù)。
import pymysql
# 鏈接
conn = pymysql.connect(
host="localhost",
database="db1",
charset="utf8mb4",
user="root",
cursorclass=pymysql.cursors.DictCursor, # 記錄結(jié)果,字典顯示
autocommit = True, # 自動提交
# password = "your password",
)
# 游標
cursor=conn.cursor()
# 執(zhí)行sql
sql = "insert into t1(name) values(%s)"
res = cursor.execute(sql,("新記錄",)) # 提交執(zhí)行,返回sql影響成功的行數(shù) 這里拼接能預(yù)防sql注入問題
print(res) # 1 成功插入一條記錄
print(cursor.lastrowid) #在插入語句后查看,查看最后一條記錄的行號
print(cursor.fetchall())
# conn.commit() # 手動提交
cursor.close() # 關(guān)閉游標
conn.close()
提交多條
使用 cursor.executemany() 方法可一次性提交多條 sql 操作。
import pymysql
# 鏈接
conn = pymysql.connect(
host="localhost",
database="db1",
charset="utf8mb4",
user="root",
cursorclass=pymysql.cursors.DictCursor, # 記錄結(jié)果,字典顯示
autocommit = True, # 自動提交
# password = "your password",
)
# 游標
cursor=conn.cursor()
# 執(zhí)行sql
sql = "insert into t1(name) values(%s)" # 同一條命令,執(zhí)行3次
res = cursor.executemany(sql,[("新記錄1"),("新紀錄2"),("新紀錄3")]) # 提交執(zhí)行,返回sql影響成功的行數(shù) 這里拼接能預(yù)防sql注入問題
print(res) # 3 成功插入三條記錄
print(cursor.lastrowid) #在插入語句后查看,查看最后一條記錄的行號
print(cursor.fetchall())
cursor.close() # 關(guān)閉游標
conn.close()
游標相關(guān)
獲取到一條記錄后,我們可以控制游標移動。
也可以控制查看游標后的多少條記錄
游標每移動一次代表一條記錄
| 命令解析 | 描述 |
|---|---|
| cursor.scroll(3,mode='absolute') | 游標以絕對位置向后移動3條記錄 |
| cursor.scroll(3,mode='relative') | 游標以當前位置向后移動3條記錄 |
| 注意:游標移動的條數(shù)即為記錄的條數(shù),如果移動值為負N就代表上N條記錄 | |
如果我們想獲取記錄,可使用以下三個方法
| 命令解析 | 描述 |
|---|---|
| cursor.fetchone() | 獲取第一條記錄,游標向下移動一行 |
| cursor.fetchmany(2) | 獲取接下來的兩條記錄,游標向下移動兩行 |
| cursor.fetchall() | 獲取全部記錄,游標移動到末尾,返回的是一個列表 |
import pymysql
# 鏈接
conn = pymysql.connect(
host="localhost",
database="db1",
charset="utf8mb4",
user="root",
cursorclass=pymysql.cursors.DictCursor, # 記錄結(jié)果,字典顯示
autocommit = True, # 自動提交
# password = "your password",
)
# 游標
cursor=conn.cursor()
# 執(zhí)行sql
sql = "select * from t1" # t1表中4條記錄
cursor.execute(sql)
print(cursor.fetchone()) 游標移動到2的位置
cursor.scroll(2,mode='relative') 向下移動2,當前游標為4
print(cursor.fetchone())
cursor.close() # 關(guān)閉游標
conn.close()
"""
{'id': 1, 'name': '記錄1'}
{'id': 4, 'name': '記錄4'}
"""
插入行號
如果執(zhí)行的是 INSERT 操作,可以在插入后查看最后插入的 ID 行號
import pymysql
# 鏈接
conn = pymysql.connect(
host="localhost",
database="db1",
charset="utf8mb4",
user="root",
cursorclass=pymysql.cursors.DictCursor, # 記錄結(jié)果,字典顯示
autocommit = True, # 自動提交
# password = "your password",
)
# 游標
cursor=conn.cursor()
# 執(zhí)行sql
sql = "insert into t1(name) values(%s)" # 同一條命令,執(zhí)行3次
res = cursor.executemany(sql,[("新記錄1"),("新紀錄2"),("新紀錄3")]) # 提交執(zhí)行,返回sql影響成功的行數(shù) 這里拼接能預(yù)防sql注入問題
print(res) # 3 成功插入三條記錄
print(cursor.lastrowid) #在插入語句后查看,查看最后一條記錄的行號
print(cursor.fetchall())
# conn.commit() # 手動提交
cursor.close() # 關(guān)閉游標
conn.close()
以上就是Python pymsql模塊的使用的詳細內(nèi)容,更多關(guān)于Python pymsql的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
Django?logging日志模塊實例詳解(日志記錄模板配置)
Django使用python自帶的logging作為日志打印工具,下面這篇文章主要給大家介紹了Django?logging日志模塊(日志記錄模板配置)的相關(guān)資料,文中通過示例代碼介紹的非常詳細,需要的朋友可以參考下2022-08-08
Python3中常用的處理時間和實現(xiàn)定時任務(wù)的方法的介紹
這篇文章主要介紹了Python3中常用的處理時間和實現(xiàn)定時任務(wù)的方法,包括循環(huán)執(zhí)行某個任務(wù)這樣的實現(xiàn),需要的朋友可以參考下2015-04-04
Python3之不使用第三方變量,實現(xiàn)交換兩個變量的值
今天小編就為大家分享一篇Python3之不使用第三方變量,實現(xiàn)交換兩個變量的值,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-06-06
requests.post()方法中data和json參數(shù)的使用
這篇文章主要介紹了requests.post()方法中data和json參數(shù)的使用方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-02-02
python連接oracle數(shù)據(jù)庫操作實例及遇到的異常
這篇文章主要給大家介紹了關(guān)于python連接oracle數(shù)據(jù)庫操作實例及遇到的一些異常,Oracle是著名且廣泛使用的數(shù)據(jù)庫之一,而python的數(shù)據(jù)處理功能可以很好地利用這種連接性,文中通過代碼介紹的非常詳細,需要的朋友可以參考下2023-12-12
Python報錯too?many?values?to?unpack問題及解決
這篇文章主要介紹了Python報錯too?many?values?to?unpack問題及解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2023-05-05

