https://github.com/PyMySQL/PyMySQLpython
import pymysql.cursors # 鏈接數據庫 connection = pymysql.connect(host='localhost', user='user', password='passwd', db='db', charset='utf8mb4', cursorclass=pymysql.cursors.DictCursor) try: with connection.cursor() as cursor: # 增長一條數據 sql = "INSERT INTO `users` (`email`, `password`) VALUES (%s, %s)" cursor.execute(sql, ('webmaster@python.org', 'very-secret')) connection.commit() with connection.cursor() as cursor: # 查詢數據 sql = "SELECT `id`, `password` FROM `users` WHERE `email`=%s" cursor.execute(sql, ('webmaster@python.org',)) result = cursor.fetchone() print(result) finally: connection.close()
# 獲取輸入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()
返回字典格式的數據mysql
# 獲取輸入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() 回滾取消操做。git
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(關聯操做時會用到)github
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()
批量執行web
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()
查詢單條數據sql
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()函數,然而數據庫並不支持事務或者事務已關閉。 |