來源:https://www.cnblogs.com/woider/p/5926744.html
==================pymysql===================
由於 MySQLdb 模塊還不支持 Python3.x,所以 Python3.x 如果想連接MySQL需要安裝 pymysql 模塊。
pymysql 模塊可以通過 pip 安裝。但如果你使用的是 pycharm IDE,則可以使用 project python 安裝第三方模塊。
[File] >> [settings] >> [Project: python] >> [Project Interpreter] >> [Install按鈕]
由於Python統一了數據庫連接的接口,所以 pymysql 和 MySQLdb 在使用方式上是類似的:
#創建數據庫連接
pymysql.Connect()參數說明 host(str): MySQL服務器地址 port(int): MySQL服務器端口號 user(str): 用戶名 passwd(str): 密碼 db(str): 數據庫名稱 charset(str): 連接編碼,存在中文的時候,連接需要添加charset='utf8',否則中文顯示亂碼。 connection對象支持的方法 cursor() 使用該連接創建並返回游標 commit() 提交當前事務,不然無法保存新建或者修改的數據 rollback() 回滾當前事務 close() 關閉連接 cursor對象支持的方法 execute(op) 執行SQL,並返回受影響行數 fetchone() 取得結果集的下一行 fetchmany(size) 獲取結果集的下幾行 fetchall() 獲取結果集中的所有行 rowcount() 返回數據條數或影響行數 close() 關閉游標對象
==================MySQL===================
首先在連接數據庫之前,先創建一個交易表,方便測試 pymysql 的功能:
DROP TABLE IF EXISTS trade; CREATE TABLE trade ( id int(4) unsigned NOT NULL AUTO_INCREMENT, name varchar(6) NOT NULL COMMENT '用戶真實姓名', account varchar(15) NOT NULL COMMENT '銀行儲蓄賬號', saving decimal(8,2) unsigned NOT NULL DEFAULT '0.00' COMMENT '賬戶儲蓄金額', expend decimal(8,2) unsigned NOT NULL DEFAULT '0.00' COMMENT '賬戶支出總計', income decimal(8,2) unsigned NOT NULL DEFAULT '0.00' COMMENT '賬戶收入總計', PRIMARY KEY (id), UNIQUE KEY name_UNIQUE (name) ) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8; INSERT INTO trade VALUES (1,'喬布斯','18012345678',0.00,0.00,0.00);
==================Python===================
使用Python腳本實現增刪改查和事務處理,源碼如下:
import pymysql.cursors # 連接數據庫 connect = pymysql.Connect( host='localhost', port=3310, user='woider', passwd='3243', db='python', charset='utf8' ) # 獲取游標 cursor = connect.cursor() # 插入數據 sql = "INSERT INTO trade (name, account, saving) VALUES ( '%s', '%s', %.2f )" data = ('雷軍', '13512345678', 10000) cursor.execute(sql % data) connect.commit() print('成功插入', cursor.rowcount, '條數據') # 修改數據 sql = "UPDATE trade SET saving = %.2f WHERE account = '%s' " data = (8888, '13512345678') cursor.execute(sql % data) connect.commit() print('成功修改', cursor.rowcount, '條數據') # 查詢數據 sql = "SELECT name,saving FROM trade WHERE account = '%s' " data = ('13512345678',) cursor.execute(sql % data) for row in cursor.fetchall(): print("Name:%s\tSaving:%.2f" % row) print('共查找出', cursor.rowcount, '條數據') # 刪除數據 sql = "DELETE FROM trade WHERE account = '%s' LIMIT %d" data = ('13512345678', 1) cursor.execute(sql % data) connect.commit() print('成功刪除', cursor.rowcount, '條數據') # 事務處理 sql_1 = "UPDATE trade SET saving = saving + 1000 WHERE account = '18012345678' " sql_2 = "UPDATE trade SET expend = expend + 1000 WHERE account = '18012345678' " sql_3 = "UPDATE trade SET income = income + 2000 WHERE account = '18012345678' " try: cursor.execute(sql_1) # 儲蓄增加1000 cursor.execute(sql_2) # 支出增加1000 cursor.execute(sql_3) # 收入增加2000 except Exception as e: connect.rollback() # 事務回滾 print('事務處理失敗', e) else: connect.commit() # 事務提交 print('事務處理成功', cursor.rowcount) # 關閉連接 cursor.close() connect.close()
==================測試結果===================