如何使用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()

 ======================測試結果========================

 


免責聲明!

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



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