1. 程式人生 > >Python 3.5 連接Mysql數據庫(pymysql 方式)

Python 3.5 連接Mysql數據庫(pymysql 方式)

ima 用戶名 oca rim 遊標對象 ide char 名稱 etc

由於 MySQLdb 模塊還不支持 Python3.x,官方的Mysql連接包只支持到3.4,所以 Python3.5 如果想連接MySQL需要安裝 pymysql 模塊。

pymysql 模塊可以通過 pip 安裝。

由於Python統一了數據庫連接的接口,所以 pymysql 和 MySQLdb 在使用方式上是類似的:

技術分享 技術分享
pymysql.Connect()參數說明
host(str):      MySQL服務器地址
port(int):      MySQL服務器端口號
user(str):      用戶名
passwd(str):    密碼
db(str):        數據庫名稱
charset(str):   連接編碼

connection對象支持的方法
cursor()        使用該連接創建並返回遊標
commit()        提交當前事務
rollback()      回滾當前事務
close()         關閉連接

cursor對象支持的方法
execute(op)     執行一個數據庫的查詢命令
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(11) 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()

Python 3.5 連接Mysql數據庫(pymysql 方式)