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 中的第一個參數指的是相對於當前位置來移動光標,可以為負數