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 相关文章推荐
编写同时兼容Python2.x与Python3.x版本的代码的几个示例
Mar 30 Python
python字符串常用方法
Jun 14 Python
对pandas中Series的map函数详解
Jul 25 Python
python Web开发你要理解的WSGI & uwsgi详解
Aug 01 Python
python 实现视频流下载保存MP4的方法
Jan 09 Python
python中import与from方法总结(推荐)
Mar 21 Python
Django框架使用mysql视图操作示例
May 15 Python
python 多线程对post请求服务器测试并发的方法
Jun 13 Python
python读取目录下所有的jpg文件,并显示第一张图片的示例
Jun 13 Python
django2笔记之路由path语法的实现
Jul 17 Python
Python发起请求提示UnicodeEncodeError错误代码解决方法
Apr 21 Python
从零开始的TensorFlow+VScode开发环境搭建的步骤(图文)
Aug 31 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中的global
2014/08/19 PHP
PHP生成树的方法
2015/07/28 PHP
php 广告点击统计代码(php+mysql)
2018/02/21 PHP
php文件后缀不强制为.php的实操方法
2019/09/18 PHP
让ie运行js时提示允许阻止内容运行的解决方法
2010/10/24 Javascript
关于JS控制代码暂停的实现方法分享
2012/10/11 Javascript
Three.js源码阅读笔记(物体是如何组织的)
2012/12/27 Javascript
JavaScript数组常用操作技巧汇总
2014/11/17 Javascript
实现无刷新联动例子汇总
2015/05/20 Javascript
JS随机调用指定函数的方法
2015/07/01 Javascript
js识别uc浏览器的代码
2015/11/06 Javascript
使用BootStrapValidator完成前端输入验证
2016/09/28 Javascript
js 实现省市区三级联动菜单效果
2017/02/20 Javascript
AngularJs 延时器、计时器实例代码
2017/09/16 Javascript
vue进行图片的预加载watch用法实例讲解
2018/02/07 Javascript
Vue的Eslint配置文件eslintrc.js说明与规则介绍
2020/02/03 Javascript
Node.js API详解之 querystring用法实例分析
2020/04/29 Javascript
js实现表单项的全选、反选及删除操作示例
2020/06/05 Javascript
python中的编码知识整理汇总
2016/01/26 Python
Python搭建HTTP服务器和FTP服务器
2017/03/09 Python
Python3随机漫步生成数据并绘制
2018/08/27 Python
python+logging+yaml实现日志分割
2019/07/22 Python
python进程间通信Queue工作过程详解
2019/11/01 Python
Python 脚本实现淘宝准点秒杀功能
2019/11/13 Python
解决Python3下map函数的显示问题
2019/12/04 Python
python在协程中增加任务实例操作
2021/02/28 Python
俄罗斯旅游网站:Tripadvisor俄罗斯
2017/03/21 全球购物
奥斯汀独木舟和皮划艇:Austin Canoe & Kayak
2018/05/22 全球购物
美国最值得信赖的宠物药房:Allivet
2019/03/23 全球购物
如何判断计算机可能已经中马
2013/03/22 面试题
擅自离岗检讨书
2014/02/11 职场文书
某某同志考察材料
2014/05/28 职场文书
乡镇领导干部个人对照检查材料思想汇报
2014/09/23 职场文书
意外死亡赔偿协议书
2014/10/14 职场文书
2015年民主生活会发言材料
2014/12/15 职场文书
行政撤诉申请书
2015/05/18 职场文书