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基于smtplib实现异步发送邮件服务
May 28 Python
利用Python如何生成随机密码
Apr 20 Python
对numpy 数组和矩阵的乘法的进一步理解
Apr 04 Python
python opencv3实现人脸识别(windows)
May 25 Python
python常用函数与用法示例
Jul 02 Python
django rest framework serializers序列化实例
May 13 Python
Python RabbitMQ实现简单的进程间通信示例
Jul 02 Python
虚拟机下载python是否需要联网
Jul 27 Python
小白教你PyCharm从下载到安装再到科学使用PyCharm2020最新激活码
Sep 25 Python
OpenCV+Python3.5 简易手势识别的实现
Dec 21 Python
python爬虫--selenium模块
Mar 31 Python
Python docx库删除复制paragraph及行高设置图片插入示例
Jul 23 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
ThinkPHP实现二级循环读取的方法
2014/11/03 PHP
PHP反射实际应用示例
2019/04/03 PHP
PHP 代码简洁之道(小结)
2019/10/16 PHP
Laravel Eloquent分表方法并使用模型关联的实现
2019/11/25 PHP
js 弹出框 替代浏览器的弹出框
2010/10/29 Javascript
json数据与字符串的相互转化示例
2013/09/18 Javascript
jQuery中next()方法用法实例
2015/01/07 Javascript
使用javascript实现雪花飘落的效果
2015/01/13 Javascript
JS模仿编辑器实时改变文本框宽度和高度大小的方法
2015/08/17 Javascript
15个常用的jquery代码片段
2015/12/19 Javascript
Javascript在IE和Firefox浏览器常见兼容性问题总结
2016/08/03 Javascript
Bootstrap基本组件学习笔记之下拉菜单(7)
2016/12/07 Javascript
BootStrap table删除指定行的注意事项(笔记整理)
2017/02/05 Javascript
JS 实现微信扫一扫功能
2018/09/14 Javascript
vue中使用cookies和crypto-js实现记住密码和加密的方法
2018/10/18 Javascript
JS实现简单的抽奖转盘效果示例
2019/02/16 Javascript
react写一个select组件的实现代码
2019/04/03 Javascript
js 压缩图片的示例(只缩小体积,不更改图片尺寸)
2020/10/21 Javascript
基于Python_脚本CGI、特点、应用、开发环境(详解)
2017/05/23 Python
python实现生命游戏的示例代码(Game of Life)
2018/01/24 Python
Python带动态参数功能的sqlite工具类
2018/05/26 Python
python实现爬取图书封面
2018/07/05 Python
CentOS下Python3的安装及创建虚拟环境的方法
2018/11/28 Python
如何基于Django实现上下文章跳转
2020/09/16 Python
Python加载数据的5种不同方式(收藏)
2020/11/13 Python
Html5 postMessage实现跨域消息传递
2016/03/11 HTML / CSS
请解释一下webService? 如何用.net实现webService
2014/06/09 面试题
幼儿园教师教育感言
2014/02/28 职场文书
大学开学计划书
2014/04/30 职场文书
小学六一儿童节活动方案
2014/08/27 职场文书
2014年超市工作总结
2014/11/19 职场文书
财务总监岗位职责
2015/02/03 职场文书
2015企业年终工作总结范文
2015/05/27 职场文书
回复函范文
2015/07/14 职场文书
go语言中json数据的读取和写出操作
2021/04/28 Golang
Python数据处理的三个实用技巧分享
2022/04/01 Python