PyMySQL模塊的使用

速查

https://github.com/PyMySQL/PyMySQL

# 獲取輸入SQL語句的光標對象,指定返回的數據格式爲字典格式
cursor = conn.cursor(cursor=pymysql.cursors.DictCursor)

# 執行sql語句
cursor.execute(sql, (username, pwd))

# 提交事務
conn.commit()

# 獲取單條查詢數據
ret = cursor.fetchone()

# 返回所有數據
ret = cursor.fetchall()

# 回滾
conn.rollback() 

基本使用

# 導入模塊
import pymysql

username = input("請輸入用戶名: ")
pwd = input("請輸入密碼: ")

# 連接數據庫
conn = pymysql.connect(host="localhost",
                       port=3306,
                       database="userinfo",
                       user='root',
                       password="123456",
                       charset="utf8"
                       )

# 獲取輸入SQL語句的光標對象
cursor = conn.cursor()

# 定義要執行的SQL語句
sql = "select * from info WHERE username=%s and password=%s;"

# 執行sql語句,讓pymysql幫我們拼接SQL語句
cursor.execute(sql, (username, pwd))

# 關閉光標對象
cursor.close()

# 關閉數據庫連接
conn.close()

返回字典格式的數據

# 獲取輸入SQL語句的光標對象,指定返回的數據格式爲字典格式
cursor = conn.cursor(cursor=pymysql.cursors.DictCursor)

增刪改查操作

import pymysql

# 獲取用戶輸入
username = input("請輸入用戶名: ")
pwd = input("請輸入密碼: ")

# 連接數據庫
conn = pymysql.connect(host="localhost",
                       port=3306,
                       database="userinfo",
                       user='root',
                       password="123456",
                       charset="utf8"
                       )

# 獲取輸入SQL語句的光標對象
cursor = conn.cursor()

# sql語句
sql = "insert into info (username, password) VALUES (%s, %s);"

# 執行sql語句
cursor.execute(sql, [username, pwd])

# 提交
conn.commit()

# 關閉光標對象和連接
cursor.close()
conn.close()

插入數據失敗回滾
在執行增刪改操作時,如果不想提交前面的操作,可以使用 rollback() 回滾取消操作。

import pymysql

# 獲取用戶輸入
username = input("請輸入用戶名: ")
pwd = input("請輸入密碼: ")

# 連接數據庫
conn = pymysql.connect(host="localhost",
                       port=3306,
                       database="userinfo",
                       user='root',
                       password="123456",
                       charset="utf8"
                       )

# 獲取輸入SQL語句的光標對象
cursor = conn.cursor()

# 拼接sql語句
sql = "insert into info (username, password) VALUES (%s, %s);"

# 執行sql語句
# 讓pymysql幫我們拼接SQL語句(傳入的參數可以是列表也可以是元祖,一定要是一個可迭代對象)

try:
    cursor.execute(sql, [username, pwd])
    # 提交
    conn.commit()
except Exception as e:
    print("報錯啦:", str(e))
    conn.rollback() # 回滾

# 關閉光標對象和連接
cursor.close()
conn.close()

獲取插入數據的ID(關聯操作時會用到)

import pymysql

# 獲取用戶輸入
username = input("請輸入用戶名: ")
pwd = input("請輸入密碼: ")

# 連接數據庫
conn = pymysql.connect(host="localhost",
                       port=3306,
                       database="userinfo",
                       user='root',
                       password="123456",
                       charset="utf8"
                       )

# 獲取輸入SQL語句的光標對象
cursor = conn.cursor()

# 拼接sql語句
sql = "insert into info (username, password) VALUES (%s,%s);"

# 執行sql語句
cursor.execute(sql, [username, pwd])

# 提交
conn.commit()

# 提交之後,獲取剛插入的數據的ID
last_id = cursor.lastrowid

# 關閉光標對象和連接
cursor.close()
conn.close()

批量執行

import pymysql

# 連接數據庫
conn = pymysql.connect(host="localhost",
                       port=3306,
                       database="userinfo",
                       user='root',
                       password="123456",
                       charset="utf8"
                       )

# 獲取光標對象
cursor = conn.cursor()

data = [("奔馳哥", 123456), ("小寶寶", 123456), ("教主", 123456)]

# sql語句
sql = "insert into info(username, password) VALUES (%s, %s)"

# 批量插入
cursor.executemany(sql, data)

# 提交
conn.commit()

# 關閉光標對象和連接
cursor.close()
conn.close()

import pymysql

# 連接數據庫
conn = pymysql.connect(host="localhost",
                       port=3306,
                       database="userinfo",
                       user='root',
                       password="123456",
                       charset="utf8"
                       )

# 獲取光標對象
cursor = conn.cursor()

# sql語句
sql = "delete from info where id=%s"

# 執行SQL語句
cursor.execute(sql, [1])

# 提交事務
conn.commit()

# 關閉光標對象和連接
cursor.close()
conn.close()

import pymysql

# 連接數據庫
conn = pymysql.connect(host="localhost",
                       port=3306,
                       database="userinfo",
                       user='root',
                       password="123456",
                       charset="utf8"
                       )

# 獲取輸入SQL語句的光標對象
cursor = conn.cursor()

# sql語句
sql = "update info set password=%s where id=%s"

password = "654321"
id = 2

cursor.execute(sql, [password, id])
conn.commit()

cursor.close()
conn.close()

查詢單條數據

import pymysql

# 連接數據庫
conn = pymysql.connect(host="localhost",
                       port=3306,
                       database="userinfo",
                       user='root',
                       password="123456",
                       charset="utf8"
                       )

# 獲取輸入SQL語句的光標對象,指定返回的數據格式爲字典格式
cursor = conn.cursor(cursor=pymysql.cursors.DictCursor)

sql = "select * from info"

# 提交事務
cursor.execute(sql)

# 獲取單條查詢數據
ret = cursor.fetchone()

# 返回所有數據
ret = cursor.fetchall() 

# 關閉光標和連接
cursor.close()
conn.close()

進階用法

查詢後光標就會移動,下次查詢就會再上次查詢的數據之後開始新的查詢

# 可以獲取指定數量的數據
cursor.fetchmany(3)

# 光標按絕對位置移動1
cursor.scroll(1, mode="absolute")

# 光標按照相對位置(當前位置)移動1
cursor.scroll(1, mode="relative")

錯誤處理

異常 描述
Warning 當有嚴重警告時觸發,例如插入數據是被截斷等等。
Error 警告以外所有其他錯誤類。
InterfaceError 當有數據庫接口模塊本身的錯誤(而不是數據庫的錯誤)發生時觸發。
DatabaseError 和數據庫有關的錯誤發生時觸發。
DataError 當有數據處理時的錯誤發生時觸發,例如:除零錯誤,數據超範圍等等。
OperationalError 指非用戶控制的,而是操作數據庫時發生的錯誤。例如:連接意外斷開、 數據庫名未找到、事務處理失敗、內存分配錯誤等等操作數據庫是發生的錯誤。
IntegrityError 完整性相關的錯誤,例如外鍵檢查失敗等。
InternalError 數據庫的內部錯誤,例如遊標(cursor)失效了、事務同步失敗等等。
ProgrammingError 程序錯誤,例如數據表(table)沒找到或已存在、SQL語句語法錯誤、 參數數量錯誤等等。
NotSupportedError 不支持錯誤,指使用了數據庫不支持的函數或API等。例如在連接對象上 使用.rollback()函數,然而數據庫並不支持事務或者事務已關閉。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章