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中random模块生成随机数详解
Mar 10 Python
详解python中asyncio模块
Mar 03 Python
Python将DataFrame的某一列作为index的方法
Apr 08 Python
通过Python模块filecmp 对文件比较的实现方法
Jun 29 Python
在pycharm上mongodb配置及可视化设置方法
Nov 30 Python
Python实战购物车项目的实现参考
Feb 20 Python
Python读取stdin方法实例
May 24 Python
pytorch 准备、训练和测试自己的图片数据的方法
Jan 10 Python
详解Pycharm出现out of memory的终极解决方法
Mar 03 Python
python实现mask矩阵示例(根据列表所给元素)
Jul 30 Python
Python 删除List元素的三种方法remove、pop、del
Nov 16 Python
Python标准库之typing的用法(类型标注)
Jun 02 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 google或baidu分页代码
2009/11/26 PHP
PHP 八种基本的数据类型小结
2011/06/01 PHP
JS启动应用程序的一个简单例子
2008/05/11 Javascript
让FireFox支持innerText的实现代码
2009/12/01 Javascript
js本身的局限性 别让javascript做太多事
2010/03/23 Javascript
JavaScript 匿名函数(anonymous function)与闭包(closure)
2011/10/04 Javascript
JS将制定内容复制到剪切板示例代码
2014/02/11 Javascript
JavaScript中Boolean对象的属性解析
2015/10/21 Javascript
window.location.hash知识汇总
2015/11/09 Javascript
关于JS中的方法是否加括号的问题
2016/07/27 Javascript
AngularJS中的表单简单入门
2016/07/28 Javascript
js控制文本框只能输入中文、英文、数字与指定特殊符号的实现代码
2016/09/09 Javascript
Bootstrap Tree View简单而优雅的树结构组件实例解析
2017/06/15 Javascript
利用 spin.js 生成等待效果(js 等待效果)
2017/06/25 Javascript
在Vue 中使用Typescript的示例代码
2018/09/10 Javascript
Vue 组件注册实例详解
2019/02/23 Javascript
vue+django实现一对一聊天功能的实例代码
2019/07/17 Javascript
Vue CLI3移动端适配(px2rem或postcss-plugin-px2rem)
2020/04/27 Javascript
JS 设计模式之:单例模式定义与实现方法浅析
2020/05/06 Javascript
[00:59]DOTA2英雄背景故事——上古巨神
2020/06/28 DOTA
使用Python的Twisted框架构建非阻塞下载程序的实例教程
2016/05/25 Python
django2+uwsgi+nginx上线部署到服务器Ubuntu16.04
2018/06/26 Python
Django分页查询并返回jsons数据(中文乱码解决方法)
2018/08/02 Python
在python中利用try..except来代替if..else的用法
2019/12/19 Python
Pytorch 实现权重初始化
2019/12/31 Python
python 截取XML中bndbox的坐标中的图像,另存为jpg的实例
2020/03/10 Python
Pyecharts地图显示不完成问题解决方案
2020/05/11 Python
使用Keras预训练好的模型进行目标类别预测详解
2020/06/27 Python
通信工程毕业生自荐信
2013/11/01 职场文书
违纪检讨书2000字
2014/02/08 职场文书
教师师德反思材料
2014/02/15 职场文书
班级旅游计划书
2014/05/03 职场文书
2014年保卫部工作总结
2014/11/21 职场文书
入伍志愿书怎么写?
2019/07/19 职场文书
Python批量将csv文件转化成xml文件的实例
2021/05/10 Python
关于PostgreSQL JSONB的匹配和交集问题
2021/09/14 PostgreSQL