溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

PyMySQL模塊怎么用

發(fā)布時間:2021-10-18 11:55:03 來源:億速云 閱讀:116 作者:小新 欄目:編程語言

這篇文章將為大家詳細(xì)講解有關(guān)PyMySQL模塊怎么用,小編覺得挺實用的,因此分享給大家做個參考,希望大家閱讀完這篇文章后可以有所收獲。

官方教程

import pymysql.cursors

# 連接數(shù)據(jù)庫
connection = pymysql.connect(host='localhost',
                             user='user',
                             password='passwd',
                             db='db',
                             charset='utf8mb4',
                             cursorclass=pymysql.cursors.DictCursor)

try:
    with connection.cursor() as cursor:
        # 增加一條數(shù)據(jù)
        sql = "INSERT INTO `users` (`email`, `password`) VALUES (%s, %s)"
        cursor.execute(sql, ('webmaster@python.org', 'very-secret'))

    connection.commit()

    with connection.cursor() as cursor:
        # 查詢數(shù)據(jù)
        sql = "SELECT `id`, `password` FROM `users` WHERE `email`=%s"
        cursor.execute(sql, ('webmaster@python.org',))
        result = cursor.fetchone()
        print(result)
finally:
    connection.close()

備查

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

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

# 提交事務(wù)
conn.commit()

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

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

# 回滾
conn.rollback()

基本使用

# 導(dǎo)入模塊
import pymysql

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

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

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

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

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

# 關(guān)閉光標(biāo)對象
cursor.close()

# 關(guān)閉數(shù)據(jù)庫連接
conn.close()

返回字典格式的數(shù)據(jù)

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

增刪改查操作

import pymysql

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

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

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

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

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

# 提交
conn.commit()

# 關(guān)閉光標(biāo)對象和連接
cursor.close()
conn.close()

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

import pymysql

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

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

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

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

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

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

# 關(guān)閉光標(biāo)對象和連接
cursor.close()
conn.close()

獲取插入數(shù)據(jù)的ID(關(guān)聯(lián)操作時會用到)

import pymysql

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

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

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

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

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

# 提交
conn.commit()

# 提交之后,獲取剛插入的數(shù)據(jù)的ID
last_id = cursor.lastrowid

# 關(guān)閉光標(biāo)對象和連接
cursor.close()
conn.close()

批量執(zhí)行

import pymysql

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

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

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

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

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

# 提交
conn.commit()

# 關(guān)閉光標(biāo)對象和連接
cursor.close()
conn.close()

import pymysql

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

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

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

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

# 提交事務(wù)
conn.commit()

# 關(guān)閉光標(biāo)對象和連接
cursor.close()
conn.close()

import pymysql

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

# 獲取輸入SQL語句的光標(biāo)對象
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()

查詢單條數(shù)據(jù)

import pymysql

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

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

sql = "select * from info"

# 提交事務(wù)
cursor.execute(sql)

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

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

# 關(guān)閉光標(biāo)和連接
cursor.close()
conn.close()

進階用法

查詢后光標(biāo)就會移動,下次查詢就會再上次查詢的數(shù)據(jù)之后開始新的查詢

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

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

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

錯誤處理

異常描述
Warning當(dāng)有嚴(yán)重警告時觸發(fā),例如插入數(shù)據(jù)是被截斷等等。
Error警告以外所有其他錯誤類。
InterfaceError當(dāng)有數(shù)據(jù)庫接口模塊本身的錯誤(而不是數(shù)據(jù)庫的錯誤)發(fā)生時觸發(fā)。
DatabaseError和數(shù)據(jù)庫有關(guān)的錯誤發(fā)生時觸發(fā)。
DataError當(dāng)有數(shù)據(jù)處理時的錯誤發(fā)生時觸發(fā),例如:除零錯誤,數(shù)據(jù)超范圍等等。
OperationalError指非用戶控制的,而是操作數(shù)據(jù)庫時發(fā)生的錯誤。例如:連接意外斷開、 數(shù)據(jù)庫名未找到、事務(wù)處理失敗、內(nèi)存分配錯誤等等操作數(shù)據(jù)庫是發(fā)生的錯誤。
IntegrityError完整性相關(guān)的錯誤,例如外鍵檢查失敗等。
InternalError數(shù)據(jù)庫的內(nèi)部錯誤,例如游標(biāo)(cursor)失效了、事務(wù)同步失敗等等。
ProgrammingError程序錯誤,例如數(shù)據(jù)表(table)沒找到或已存在、SQL語句語法錯誤、 參數(shù)數(shù)量錯誤等等。
NotSupportedError不支持錯誤,指使用了數(shù)據(jù)庫不支持的函數(shù)或API等。例如在連接對象上 使用.rollback()函數(shù),然而數(shù)據(jù)庫并不支持事務(wù)或者事務(wù)已關(guān)閉。

關(guān)于“PyMySQL模塊怎么用”這篇文章就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,使各位可以學(xué)到更多知識,如果覺得文章不錯,請把它分享出去讓更多的人看到。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI