如何使用python連線mysql資料庫
首先在我們工作中,難免遇到給測試環境造大量的測試資料,給資料庫造資料有很多方式方法,這裡用python造資料一般是這樣的:
第一步進入Linux系統裡已部署好的mysql資料庫登入如:/app/mysql/bin/mysql -uroot -pBccdr@123456
第二步:進入資料庫後先驗證資料庫是否正常,比如先查詢庫,表等,show database; use 庫名;等等
第三步:我這邊python本地沒有裝mysql庫,先在本地安裝庫。我python安裝在D盤,首先切換到D盤後執行pip install pymysql
第四步:在linux系統裡的mysql資料庫先建立一個庫用來做專門測試用的
第五步:開啟pycharm後,新建立一個測試包及測試.py檔案
由於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 的功能:
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()
======================測試結果========================
學而不思則罔,思而不學則殆