pymysql


pymysql

pymysql 是 Python 中操作MYSQL 的模塊,其使用方法和MySQLdb 幾乎相同。

下載安裝:pip install pymysql

連接數據庫

注意事項

在進行以下內容之前需要注意:

  • 你有一個MySQL數據庫,並且已經啟動
  • 你有可以連接該數據庫的用戶名和密碼
  • 你有一個有權限操作的 database

基本使用

# 導入 pymysql 模塊
import pymysql

# 創建鏈接
conn = pymysql.connect(host="192.168.12.111", user="root", password="123123", database="class", charset="utf8")

# 創建光標
cu = conn.cursor()

# 要執行的 SQL 語句
sql = "insert into s8(username, password) VALUE (%s, %s);"

# 執行 SQL 語句,並接收受影響的行數
ret = cu.execute(sql, ("xiaoming", "123"))

# 將數據提交到數據庫,否則數據就沒有添加到表中
conn.commit()

# 關閉光標
cu.close()

# 斷開鏈接
conn.close()

# 打印受影響的行數
print(ret)  # 結果 1

增刪改查操作

1、增

# 導入pymysql 模塊
import pymysql

# 連接 database
conn = pymysql.connect(host="你的數據庫地址", user="用戶名", password="密碼", database="數據庫名", charset="uft8")

# 得到一個可以執行SQL語句的光標對象
cursor = conn.cursor()

# 要執行的SQL語句
sql = "insert into s8(username, password) VALUES (%s, %s);"

name = "Alex"
pwd = "123"

# 執行SQL語句
cursor.execute(sql,[name, pwd])  # 這里的第二個參數必須是元組或者列表的形式

# 提交事務   在對表中的記錄做增、刪、改的時候必須要提交事務,否則所做動作無效
conn.commit()

# 釋放光標
cursor.close()

# 斷開鏈接
conn.close()

當數據插入失敗的時候進行回滾

# 當插入數據失敗的時候進行回滾操作
# 導入模塊
import pymysql
# 鏈接database
conn = pymysql.connect(host="192.168.12.111", user="root", password="123123", database="class", charset="utf8")
# 得到一個可以執行SQL語句的光標對象
cursor = conn.cursor()
# 將要執行的SQL語句
sql = "insert into s8(username,password) VALUES (%s,%s);"
# 判斷數據插入操作是否成功,若沒有成功,則使用回滾操作
try:
    # 執行SQL語句
    cursor.execute(sql,["xiaoming", "678"])
    # 提交事務
    conn.commit()
    # 如果不成功,則執行以下代碼
except Exception as e:
    conn.rollback()

# 釋放光標
cursor.close()
# 斷開連接
conn.close()

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

# 當插入數據失敗的時候進行回滾操作
# 導入模塊
import pymysql

# 鏈接database
conn = pymysql.connect(host="192.168.12.111", user="root", password="123123", database="class", charset="utf8")
# 得到一個可以執行SQL語句的光標對象
cursor = conn.cursor()
# 將要執行的SQL語句
sql = "insert into s8(username,password) VALUES (%s,%s);"
# 判斷數據插入操作是否成功,若沒有成功,則使用回滾操作
try:
    # 執行SQL語句
    cursor.execute(sql, ["xiaoming", "678"])
    # 提交事務
    conn.commit()
    # 提交之后獲取剛剛插入的數據的ID
    last_jilu_id = cursor.lastrowid
    # 如果不成功,則執行以下代碼
except Exception as e:
    conn.rollback()

# 釋放光標
cursor.close()
# 斷開連接
conn.close()

批量執行操作

# 批量執行
# 導入模塊
import pymysql

# 鏈接database
conn = pymysql.connect(host="192.168.12.111", user="root", password="123123", database="class", charset="utf8")
# 得到一個可以執行SQL語句的光標對象
cursor = conn.cursor()
# 將要執行的SQL語句
sql = "insert into s8 (username,password) VALUES (%s,%s);"
data = [("xiaohong","123"),("xiaoming", "123"),("xiaolan","123")]
# 判斷數據插入操作是否成功,若沒有成功,則使用回滾操作
try:
    # 執行SQL語句
    cursor.executemany(sql, data)
    # 提交事務
    conn.commit()
    # 如果不成功,則執行以下代碼
except Exception as e:
    conn.rollback()
    print(e)
# 釋放光標
cursor.close()
# 斷開連接
conn.close()

 

2、刪除(也可以進行批量操作)

# 刪除操作
# 導入模塊
import pymysql

# 鏈接database
conn = pymysql.connect(host="192.168.12.111", user="root", password="123123", database="class", charset="utf8")
# 得到一個可以執行SQL語句的光標對象
cursor = conn.cursor()
# 將要執行的SQL語句
sql = "delete from s8 where username = %s;"
# 判斷數據插入操作是否成功,若沒有成功,則使用回滾操作
try:
    # 執行SQL語句
    cursor.execute(sql, ("xiaohong",))
    # 提交事務
    conn.commit()
    # 如果不成功,則執行以下代碼
except Exception as e:
    conn.rollback()
    print(e)
# 釋放光標
cursor.close()
# 斷開連接
conn.close()

 

3、修改(這里寫的是批量操作的例子)

# 刪除操作
# 導入模塊
import pymysql

# 鏈接database
conn = pymysql.connect(host="192.168.12.111", user="root", password="123123", database="class", charset="utf8")
# 得到一個可以執行SQL語句的光標對象
cursor = conn.cursor()
# 將要執行的SQL語句
sql = "update s8 set username=%s where username=%s;"
# 判斷數據插入操作是否成功,若沒有成功,則使用回滾操作
data = [("xh", "xiaohong"), ("xm", "xiaoming"), ("xl", "xiaolan")]
try:
    # 執行SQL語句
    cursor.executemany(sql, data)
    # 提交事務
    conn.commit()
    # 如果不成功,則執行以下代碼
except Exception as e:
    conn.rollback()
    print(e)
# 釋放光標
cursor.close()
# 斷開連接
conn.close()

 

4、查詢操作

查詢單條數據

# 導入模塊
import pymysql

# 鏈接database
conn = pymysql.connect(host="192.168.12.111", user="root", password="123123", database="class", charset="utf8")
# 得到一個可以執行SQL語句的光標對象
cursor = conn.cursor()
# 將要執行的SQL語句
sql = "select * from s8 where id>1;"
# 執行SQL語句
cursor.execute(sql)
# 獲取查詢到的單條數據
ret = cursor.fetchone()
# 釋放光標
cursor.close()
# 斷開連接
conn.close()
print(ret)

 

查詢多條數據

# 導入模塊
import pymysql

# 鏈接database
conn = pymysql.connect(host="192.168.12.111", user="root", password="123123", database="class", charset="utf8")
# 得到一個可以執行SQL語句的光標對象
cursor = conn.cursor()
# 將要執行的SQL語句
sql = "select * from s8 where id>1;"

# 執行SQL語句
cursor.execute(sql)
# 獲取查詢到的多條數據
ret = cursor.fetchmany(5)
# 查詢所有的記錄,但是之前使用多條數據查詢的時候光標已經移到了id=52之后,此時是從id=53開始查詢的
after_all = cursor.fetchall()
# 釋放光標
cursor.close()
# 斷開連接
conn.close()
print(ret)
print(after_all)

進階用法

# 使用 fetchmany(num) 可以獲取指定數量的數據
# 例如:
          cursor.fetchmany(4)
# 光標按絕對位置移動
    # 1、absolute
        cursor.scroll(1,mode="absolute")
    # 2、relative
        cursor.scroll(-3,mode="relative")

# absolute 中的第一個參數指的是相對於查詢條件查詢的結果來移動光標的。當參數為0時,光標指向的是查詢結果的第0位的位置,這個參數不能為負值
# relative 中的第一個參數指的是相對於當前位置來移動光標,可以為負數

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM