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+Pika+RabbitMQ环境部署及实现工作队列的实例教程
Jun 29 Python
Python 提取dict转换为xml/json/table并输出的实现代码
Aug 28 Python
python搭建服务器实现两个Android客户端间收发消息
Apr 12 Python
python3 requests中使用ip代理池随机生成ip的实例
May 07 Python
python简易实现任意位数的水仙花实例
Nov 13 Python
在PyCharm中批量查找及替换的方法
Jan 20 Python
浅谈Python 递归算法指归
Aug 22 Python
python框架flask表单实现详解
Nov 04 Python
Python openpyxl模块实现excel读写操作
Jun 30 Python
Python 多进程原理及实现
Dec 21 Python
如何用python开发Zeroc Ice应用
Jan 29 Python
Python超简单容易上手的画图工具库推荐
May 10 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开发负载均衡指南
2010/07/17 PHP
深入讲解PHP的对象注入(Object Injection)
2017/03/01 PHP
PhpStorm本地断点调试的方法步骤
2018/05/21 PHP
激活 ActiveX 控件
2006/10/09 Javascript
js将long日期格式转换为标准日期格式实现思路
2013/04/07 Javascript
sogou地图API用法实例教程
2014/09/11 Javascript
javascript+HTML5的Canvas实现Lab单车动画效果
2015/08/07 Javascript
Bootstrap精简教程中秋大放送
2016/09/15 Javascript
jQuery插件HighCharts实现气泡图效果示例【附demo源码】
2017/03/13 Javascript
Bootstrap DateTime Picker日历控件简单应用
2017/03/25 Javascript
BootStrap的两种模态框方式
2017/05/10 Javascript
Vue2.0系列之过滤器的使用
2018/03/01 Javascript
React中如何引入Angular组件详解
2018/08/09 Javascript
Vue 列表上下过渡效果的实例代码
2019/06/25 Javascript
Vue学习之组件用法实例详解
2020/01/06 Javascript
vue+Element中table表格实现可编辑(select下拉框)
2020/05/21 Javascript
Javascript call及apply应用场景及实例
2020/08/26 Javascript
在类Unix系统上开始Python3编程入门
2015/08/20 Python
Python3安装Scrapy的方法步骤
2017/11/23 Python
Python使用Matplotlib实现雨点图动画效果的方法
2017/12/23 Python
基于Python List的赋值方法
2018/06/23 Python
python实现接口并发测试脚本
2019/06/25 Python
Lombok插件安装(IDEA)及配置jar包使用详解
2020/11/04 Python
Python导入父文件夹中模块并读取当前文件夹内的资源
2020/11/19 Python
HTML5基于flash实现播放RTMP协议视频的示例代码
2020/12/04 HTML / CSS
One.com挪威:北欧成长最快的网络托管公司
2016/11/19 全球购物
预订从美国飞往印度的机票:MyTicketsToIndia
2017/05/19 全球购物
C有"按引用传递"吗
2016/09/06 面试题
英语道歉信范文
2014/01/09 职场文书
模范家庭事迹材料
2014/02/10 职场文书
《掌声》教学反思
2014/02/23 职场文书
免职证明样本
2014/10/23 职场文书
公务员政审材料
2014/12/23 职场文书
旷工检讨书1000字
2015/01/01 职场文书
学习焦裕禄观后感
2015/06/09 职场文书
2007年老电脑安装win11会怎么样? 网友实测win11在老电脑运行良好
2021/11/21 数码科技