转载 Python 操作 MySQL 的正确姿势 - 琉璃块
Python 操作 MySQL 的正确姿势
收录待用,修改转载已取得腾讯云授权
作者 |邵建永
编辑 | 顾乡
使用Python进行MySQL的库主要有三个,Python-MySQL(更熟悉的名字可能是MySQLdb),PyMySQL和SQLAlchemy。
Python-MySQL资格最老,核心由C语言打造,接口精炼,性能最棒,缺点是环境依赖较多,安装复杂,近两年已停止更新,只支持Python2,不支持Python3。
PyMySQL为替代Python-MySQL而生,纯python打造,接口与Python-MySQL兼容,安装方便,支持Python3。
SQLAlchemy是一个ORM框架,它并不提供底层的数据库操作,而是要借助于MySQLdb、PyMySQL等第三方库来完成,目前SQLAlchemy在Web编程领域应用广泛。
本文主要介绍PyMySQL的正确使用方法,示例代码都是选自实战项目。
安装
简单的方式:
pip install pymysql
如果无法联网,需要进行离线安装,例如:
pip install pymysql-x.x.x.tar.gz
导入
import pymysql
连接
def connect_wxremit_db():
return pymysql.connect(host='10.123.5.28',
port=3306,
user='root',
password='root1234',
database='db_name',
charset='latin1')
查询
def query_country_name(cc2):
sql_str = ("SELECT Fcountry_name_zh"
+ " FROM t_country_code"
+ " WHERE Fcountry_2code='%s'" % (cc2))
logging.info(sql_str)
con = mysql_api.connect_wxremit_db()
cur = con.cursor()
cur.<span class="hljs-built_in">execute</span>(sql_str)
rows = cur.fetchall()
cur.<span class="hljs-built_in">close</span>()
con.<span class="hljs-built_in">close</span>()
<span class="hljs-built_in">assert</span> <span class="hljs-built_in">len</span>(rows) == <span class="hljs-number">1</span>, <span class="hljs-string">'Fatal error: country_code does not exists!'</span>
<span class="hljs-keyword">return</span> rows[<span class="hljs-number">0</span>][<span class="hljs-number">0</span>]
简单插入
def insert_file_rec(self, file_name, file_md5):
con = mysql_api.connect_wxremit_db()
cur = con.cursor()
try:
sql_str = ("INSERT INTO t_forward_file (Ffile_name, Ffile_md5)",
+ " VALUES ('%s', '%s')" % (file_name, file_md5))
cur.execute(sql_str)
con.commit()
except:
con.rollback()
logging.exception('Insert operation error')
raise
finally:
cur.close()
con.close()
批量插入
remit_ids = [('1234', 'CAD'), ('5678', 'HKD')]
con = mysql_api.connect_wxremit_db()
cur = con.cursor()
try:
cur.executemany("INSERT INTO t_order (Fremit_id, Fcur_type, Fcreate_time"
+ " VALUES (%s, %s, now())", new_items)
assert cur.rowcount == len(remit_ids), 'my error message'
con.commit()
except Exception as e:
con.rollback()
logging.exception('Insert operation error')
finally:
cur.close()
con.close()
更新
def update_refund_trans(self, remit_id):
con = mysql_api.connect_wxremit_db()
cur = con.cursor()
try:
sql_str = ("SELECT Fremit_id"
+ " FROM t_wxrefund_trans"
+ " WHERE Fremit_id='%s'" % remit_id
+ " FOR UPDATE")
logging.info(sql_str)
cur.execute(sql_str)
<span class="hljs-keyword">assert</span> cur.rowcount == <span class="hljs-number">1</span>, <span class="hljs-string">'Fatal error: The wx-refund record be deleted!'</span>
sql_str = (<span class="hljs-string">"UPDATE t_wxrefund_trans"</span>
+ <span class="hljs-string">" SET Fcheck_amount_flag=1"</span>
+ <span class="hljs-string">", Fmodify_time=now()"</span>
+ <span class="hljs-string">" WHERE Fremit_id='%s'"</span> % remit_id
logging.info(sql_str)
cur.execute(sql_str)
<span class="hljs-keyword">assert</span> cur.rowcount == <span class="hljs-number">1</span>, <span class="hljs-string">'The number of affected rows not equal to 1'</span>
con.commit()
<span class="hljs-keyword">except</span>:
con.rollback()
logging.exception(<span class="hljs-string">'Update operation error'</span>)
<span class="hljs-keyword">raise</span>
<span class="hljs-keyword">finally</span>:
cur.close()
con.close()
PyMySQL已经相当成熟,和Python-MySQL一样,它在很多Linux发行版本中都是可选的安装组件。
</div>
<div class="postDesc">posted @ <span id="post-date">2017-04-25 21:26</span> <a href="https://www.cnblogs.com/liuliliuli2017/">琉璃块</a> 阅读(<span id="post_view_count">12782</span>) 评论(<span id="post_comment_count">0</span>) <a href="https://i.cnblogs.com/EditPosts.aspx?postid=6763988" rel="nofollow">编辑</a> <a href="#" onclick="AddToWz(6763988);return false;">收藏</a></div>
</div>
转载 Python 操作 MySQL 的正确姿势 - 琉璃块的更多相关文章
- Python 操作 MySQL 的正确姿势
欢迎大家关注腾讯云技术社区-博客园官方主页,我们将持续在博客园为大家推荐技术精品文章哦~ 作者:邵建永 使用Python进行MySQL的库主要有三个,Python-MySQL(更熟悉的名字可能是MyS ...
- Golang操作MySQL的正确姿势
封装原因: 查看了很多网上提供的ORM类型的数据库操作,觉得比较麻烦,需要提前配置很多的表结构体,然后才能使用,对于数据表很多的项目就配置起来就比较麻烦,所以对golang的mysql包进行了外层包装 ...
- Python 操作 MySQL 之 pysql 与 ORM(转载)
本文针对 Python 操作 MySQL 主要使用的两种方式讲解: 原生模块 pymsql ORM框架 SQLAchemy 本章内容: pymsql 执行 sql 增\删\改\查 语句 pymsql ...
- Python操作Mysql实例代码教程在线版(查询手册)
本文介绍了Python操作MYSQL.执行SQL语句.获取结果集.遍历结果集.取得某个字段.获取表字段名.将图片插入数据库.执行事务等各种代码实例和详细介绍,代码居多,是一桌丰盛唯美的代码大餐 实 ...
- Python全栈开发之MySQL(二)------navicate和python操作MySQL
一:Navicate的安装 1.什么是navicate? Navicat是一套快速.可靠并价格相宜的数据库管理工具,专为简化数据库的管理及降低系统管理成本而设.它的设计符合数据库管理员.开发人员及中小 ...
- Python 操作 MYSQL
本文介绍了 Python 操作 MYSQL.执行 SQL 语句.获取结果集.遍历结果集.取得某个字 段.获取表字段名.将图片插入数据库.执行事务等各种代码实例和详细介绍,代码居多, 是一桌丰盛唯美的代 ...
- Python开发【第十一篇】:Python操作MySQL
本篇对于Python操作MySQL主要使用两种方式: 1.原生模块pymsql. 2.ORM框架SQLAchemy. pymsql pymsql是Python中操作MySQL的模块,其使用方法和MyS ...
- Python操作MySQL案例
最近都在学习Python代码,希望学会Python后,能给我带来更高的工作效率,所以每天坚持学习和拷代码,下面是一个Python操作MySQL的一个实例,该实例可以让更多的人更好了解MySQLdb模块 ...
- 59.phpstudy升级Mysql的正确姿势
phpstudy升级Mysql的正确姿势 phpstudy很糟心,不能选择mysql的版本,所以就强制升级. 下载mysql 首先要到官网上去下载你想要的mysql版本. 下载网址:Mysql官网地址 ...
随机推荐
- 白盒测试实践-任务进度-Day03
所使用静态代码检查工具 阿里巴巴Java开发代码检测IDE插件 小组成员 华同学.郭同学.覃同学.刘同学.穆同学.沈同学 任务进度 经过前期的学习和会议筹备,今天我们小组召开了代码评审会议.以下是今天 ...
- 最详尽的IntelliJ IDEA项目web项目搭建!!!!!!
一.创建一个web项目(首次创建最麻烦) 1.保证安装好软件 2.双击打开软件-->新建一个项目 3.web项目选择如图,先建立一个空的项目空间来放置你的项目,这是一个区别 相当于myeclip ...
- CodeForces 907F Power Tower(扩展欧拉定理)
Priests of the Quetzalcoatl cult want to build a tower to represent a power of their god. Tower is u ...
- U盘安装Centos6.2
原文地址:http://www.dedecms.com/knowledge/servers/linux-bsd/2012/0819/8452.html. 第一步:制作系统U盘(略). 第二步:设置BI ...
- ConcurrentDictionary 与 Dictionary
ASP.NET中ConcurrentDictionary是.Net4 增加的,与 Dictionary 最主要区别是, 前者是线程安全的集合,可以由多个线程同时并发读写Key-value. 那么 ...
- Arduino I2C + 三轴加速度计ADXL345
ADXL345是ADI公司生产的三轴数字加速度计芯片,与ST的LIS3DH功能接近.主要特性有: 工作电压:2.0 ~ 3.6V 功耗:待机功耗0.1μA:工作时与数据输出频率(ODR)有关,如ODR ...
- thinkphp多级分类
核心代码类(放在了Common下的Common文件夹下): namespace Common\Common; class Tool { static public $treeList = array( ...
- 构建针对 iOS 和 Android 的原生扩展
第一部分:音量控制入门 http://www.adobe.com/cn/devnet/air/articles/building-ane-ios-android-pt1.html 第二部分: 开发 A ...
- 一文读懂加固apk的开发者是怎么想的
有人说加固会明显拖慢启动速度,同时造成运行卡顿,严重降低用户体验,而且加固是完全可以脱壳的,只需要pc配合进行断点调试就能抓到解密后的dex文件,加固并没有所说的那么安全. 但是为什么还有一大批开发者 ...
- 201621123012《Java程序设计》第10次学习总结
1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结异常相关内容. 2. 书面作业 本次PTA作业题集异常 1. 常用异常 结合题集题目7-1回答 1.1 自己以前编写的代码中经常出现 ...