Python 3.x 连接数据库示例(pymysql 方式)


Posted in Python onJanuary 19, 2017

由于 MySQLdb 模块还不支持 Python3.x,所以 Python3.x 如果想连接MySQL需要安装 pymysql 模块。

pymysql 模块可以通过 pip 安装。但如果你使用的是 pycharm IDE,则可以使用 project python 安装第三方模块。

[File] >> [settings] >> [Project: python] >> [Project Interpreter] >> [Install按钮]

Python 3.x 连接数据库示例(pymysql 方式)

由于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.x 连接数据库示例(pymysql 方式)

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python创建线程示例
May 06 Python
在Django的上下文中设置变量的方法
Jul 20 Python
详解字典树Trie结构及其Python代码实现
Jun 03 Python
python实现FTP服务器服务的方法
Apr 11 Python
获取Django项目的全部url方法详解
Oct 26 Python
python中hashlib模块用法示例
Oct 30 Python
Python中常见的异常总结
Feb 20 Python
Python + selenium + requests实现12306全自动抢票及验证码破解加自动点击功能
Nov 23 Python
Flask框架路由和视图用法实例分析
Nov 07 Python
使用Python生成200个激活码的实现方法
Nov 22 Python
python 画函数曲线示例
Dec 04 Python
如何通过python实现全排列
Feb 11 Python
Python爬取网易云音乐上评论火爆的歌曲
Jan 19 #Python
一步步教你用Python实现2048小游戏
Jan 19 #Python
python 开发的三种运行模式详细介绍
Jan 18 #Python
Python 3中的yield from语法详解
Jan 18 #Python
Python中的字符串操作和编码Unicode详解
Jan 18 #Python
关于Python中异常(Exception)的汇总
Jan 18 #Python
python:socket传输大文件示例
Jan 18 #Python
You might like
怎样在PHP中通过ADO调用Asscess数据库和COM程序
2006/10/09 PHP
php程序的国际化实现方法(利用gettext)
2011/08/14 PHP
PHP简单字符串过滤方法示例
2016/09/04 PHP
js利用div背景,做一个竖线的效果。
2008/11/22 Javascript
js 实现打印网页中定义的部分内容的代码
2010/04/01 Javascript
用jquery实现输入框获取焦点消失文字
2013/04/27 Javascript
jquery京东商城双11焦点图多图广告特效代码分享
2015/09/06 Javascript
Javascript基础_嵌入图像的简单实现
2016/06/14 Javascript
Augularjs-起步详解
2016/07/08 Javascript
jQuery 翻页组件yunm.pager.js实现div局部刷新的思路
2016/08/11 Javascript
Vue.js中用webpack合并打包多个组件并实现按需加载
2017/02/17 Javascript
详解nodeJS中读写文件方法的区别
2017/03/06 NodeJs
利用 spin.js 生成等待效果(js 等待效果)
2017/06/25 Javascript
浅谈JS对象添加getter与setter的5种方法
2018/06/09 Javascript
AngularJs的UI组件ui-Bootstrap之Tooltip和Popover
2018/07/13 Javascript
微信小程序手机号码验证功能的实例代码
2018/08/28 Javascript
vue实现搜索过滤效果
2019/05/28 Javascript
Weex开发之WEEX-EROS开发踩坑(小结)
2019/10/16 Javascript
[45:25]OG vs EG 2019国际邀请赛淘汰赛 胜者组 BO3 第一场 8.22
2019/09/05 DOTA
python正则表达式match和search用法实例
2015/03/26 Python
Python实现PS图像调整颜色梯度效果示例
2018/01/25 Python
python+selenium 鼠标事件操作方法
2019/08/24 Python
PyTorch里面的torch.nn.Parameter()详解
2020/01/03 Python
用python监控服务器的cpu,磁盘空间,内存,超过邮件报警
2021/01/29 Python
如何用SQL语句进行模糊查找
2015/09/25 面试题
应届生高等护理求职信
2013/10/12 职场文书
体育教育专业毕业生自荐信
2013/11/15 职场文书
汽车运用工程系毕业生自荐信
2013/12/27 职场文书
清明节演讲稿
2014/05/27 职场文书
司法所长先进事迹
2014/06/02 职场文书
2014预备党员批评与自我批评思想汇报
2014/09/20 职场文书
2015年护士节活动策划方案
2015/05/04 职场文书
企业管理制度设计时要注意的几种“常见病”!
2019/04/19 职场文书
简单谈谈Python面向对象的相关知识
2021/06/28 Python
MySQL数据库事务的四大特性
2022/04/20 MySQL
WIN10使用IIS部署ftp服务器详细教程
2022/08/05 Servers