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的函数嵌套的使用方法
Jan 24 Python
浅谈django开发者模式中的autoreload是如何实现的
Aug 18 Python
Python序列化基础知识(json/pickle)
Oct 19 Python
Python内置random模块生成随机数的方法
May 31 Python
Python自定义一个异常类的方法
Jun 27 Python
使用python爬取微博数据打造一颗“心”
Jun 28 Python
使用TensorFlow实现简单线性回归模型
Jul 19 Python
Python生命游戏实现原理及过程解析(附源代码)
Aug 01 Python
如何为Python终端提供持久性历史记录
Sep 03 Python
Python Numpy中数据的常用保存与读取方法
Apr 01 Python
Python使用requests模块爬取百度翻译
Aug 25 Python
selenium.webdriver中add_argument方法常用参数表
Apr 08 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
第十节 抽象方法和抽象类 [10]
2006/10/09 PHP
php设计模式 Proxy (代理模式)
2011/06/26 PHP
php在文件指定行中写入代码的方法
2012/05/23 PHP
解析posix与perl标准的正则表达式区别
2013/06/17 PHP
php使用json_encode对变量json编码
2014/04/07 PHP
PHP关于htmlspecialchars、strip_tags、addslashes的解释
2014/07/04 PHP
php使用递归函数实现数字累加的方法
2015/03/16 PHP
PHP排序算法之简单选择排序(Simple Selection Sort)实例分析
2018/04/20 PHP
基于JQuery制作的产品广告效果
2010/12/08 Javascript
javascript操作ul中li的方法
2015/05/14 Javascript
js实现浮动在网页右侧的简洁QQ在线客服代码
2015/09/04 Javascript
js获取本机操作系统类型的两种方法
2015/12/19 Javascript
第一次接触神奇的Bootstrap基础排版
2016/07/26 Javascript
详解AngularJS通过ocLazyLoad实现动态(懒)加载模块和依赖
2017/03/01 Javascript
详解如何使用webpack打包多页jquery项目
2019/02/01 jQuery
详解vue引入子组件方法
2019/02/12 Javascript
解决layui追加或者动态修改的表单元素“没效果”的问题
2019/09/18 Javascript
JavaScript函数IIFE使用详解
2019/10/21 Javascript
Python学习入门之区块链详解
2017/07/25 Python
深入理解Python中range和xrange的区别
2017/11/26 Python
Python语言描述最大连续子序列和
2017/12/05 Python
matplotlib绘图实例演示标记路径
2018/01/23 Python
TensorFlow神经网络优化策略学习
2018/03/09 Python
Python Learning 列表的更多操作及示例代码
2018/08/22 Python
python下对hsv颜色空间进行量化操作
2020/06/04 Python
html5中如何将图片的绝对路径转换成文件对象
2018/01/11 HTML / CSS
LEGO玩具英国官方商店:LEGO Shop GB
2018/03/27 全球购物
英国天然有机美容护肤品:Neal’s Yard Remedies
2018/05/05 全球购物
结构工程个人自荐信范文
2013/11/30 职场文书
函授毕业个人自我评价
2014/02/20 职场文书
学生个人自我鉴定范文
2014/03/28 职场文书
教师遵守党的政治纪律情况对照检查材料
2014/09/26 职场文书
办理信用卡工作证明
2014/09/30 职场文书
2014年幼儿园园务工作总结
2014/12/05 职场文书
公务员年度个人总结
2015/02/12 职场文书
吴仁宝观后感
2015/06/09 职场文书