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 相关文章推荐
利用soaplib搭建webservice详细步骤和实例代码
Nov 20 Python
python下调用pytesseract识别某网站验证码的实现方法
Jun 06 Python
python分割列表(list)的方法示例
May 07 Python
聊聊Python中的pypy
Jan 12 Python
使用anaconda的pip安装第三方python包的操作步骤
Jun 11 Python
python简单贪吃蛇开发
Jan 28 Python
从多个tfrecord文件中无限读取文件的例子
Feb 17 Python
python标准库OS模块函数列表与实例全解
Mar 10 Python
numpy库ndarray多维数组的维度变换方法(reshape、resize、swapaxes、flatten)
Apr 28 Python
python构造IP报文实例
May 05 Python
Python基于time模块表示时间常用方法
Jun 18 Python
Python自动化操作实现图例绘制
Jul 09 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 文件缓存函数
2011/10/08 PHP
PHP中大于2038年时间戳的问题处理方案
2015/03/03 PHP
php使用递归函数实现数字累加的方法
2015/03/16 PHP
CodeIgniter辅助之第三方类库third_party用法分析
2016/01/20 PHP
js和jquery批量绑定事件传参数一(新猪猪原创)
2010/06/23 Javascript
JavaScript的parseInt 取整使用
2011/05/09 Javascript
javascript简单事件处理和with用法介绍
2013/09/16 Javascript
jQuery插件zTree实现获取当前选中节点在同级节点中序号的方法
2017/03/08 Javascript
jQuery+Ajax请求本地数据加载商品列表页并跳转详情页的实现方法
2017/07/12 jQuery
通过命令行创建vue项目的方法
2017/07/20 Javascript
利用JavaScript实现栈的数据结构示例代码
2017/08/02 Javascript
vue-cli脚手架-bulid下的配置文件
2018/03/27 Javascript
vue-auto-focus: 控制自动聚焦行为的 vue 指令方法
2018/08/25 Javascript
react组件从搭建脚手架到在npm发布的步骤实现
2019/01/09 Javascript
微信公众平台 发送模板消息(Java接口开发)
2019/04/17 Javascript
node.js基于socket.io快速实现一个实时通讯应用
2019/04/23 Javascript
微信小程序实现多选框全选与取消全选功能示例
2019/05/14 Javascript
vue 兄弟组件的信息传递的方法实例详解
2019/08/30 Javascript
Vue实现跑马灯效果
2020/05/25 Javascript
Vue实现点击导航栏当前标签后变色功能
2020/08/19 Javascript
Python实现的一个简单LRU cache
2014/09/26 Python
python文件操作整理汇总
2014/10/21 Python
使用Python的Twisted框架编写简单的网络客户端
2015/04/16 Python
Python调用命令行进度条的方法
2015/05/05 Python
Python中List.index()方法的使用教程
2015/05/20 Python
Python如何生成树形图案
2018/01/03 Python
在HTML5中使用MathML数学公式的简单讲解
2016/02/19 HTML / CSS
AmazeUI导航的示例代码
2020/08/14 HTML / CSS
SIXPAD智能健身仪英国官网:革命性的训练装备品牌
2018/09/27 全球购物
Conforama瑞士:家具、厨房、电器、装饰
2020/09/06 全球购物
委托书模板
2014/04/04 职场文书
《欢乐的泼水节》教学反思
2014/04/22 职场文书
2015大学生党员自我评价范文
2015/03/03 职场文书
关于保护环境的建议书
2019/06/24 职场文书
golang中实现给gif、png、jpeg图片添加文字水印
2021/04/26 Golang
关于maven依赖 ${xxx.version}报错问题
2022/01/18 Java/Android