Python 操作MySQL详解及实例


Posted in Python onApril 30, 2017

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.execute(sql_str)
  rows = cur.fetchall()
  cur.close()
  con.close()

  assert len(rows) == 1, 'Fatal error: country_code does not exists!'
  return rows[0][0]

简单插入

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)
      assert cur.rowcount == 1, 'Fatal error: The wx-refund record be deleted!'

      sql_str = ("UPDATE t_wxrefund_trans"
            + " SET Fcheck_amount_flag=1"
            + ", Fmodify_time=now()"
            + " WHERE Fremit_id='%s'" % remit_id
      logging.info(sql_str)
      cur.execute(sql_str)

      assert cur.rowcount == 1, 'The number of affected rows not equal to 1'
      con.commit()
    except:
      con.rollback()
      logging.exception('Update operation error')
      raise
    finally:
      cur.close()
      con.close()

PyMySQL已经相当成熟,和Python-MySQL一样,它在很多Linux发行版本中都是可选的安装组件。

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

Python 相关文章推荐
python实现ping的方法
Jul 06 Python
关于Python面向对象编程的知识点总结
Feb 14 Python
Java编程迭代地删除文件夹及其下的所有文件实例
Feb 10 Python
python 执行shell命令并将结果保存的实例
May 11 Python
利用python在excel里面直接使用sql函数的方法
Feb 08 Python
python里dict变成list实例方法
Jun 26 Python
Python配置文件处理的方法教程
Aug 29 Python
Python用input输入列表的实例代码
Feb 07 Python
在jupyter notebook 添加 conda 环境的操作详解
Apr 10 Python
Python3-异步进程回调函数(callback())介绍
May 02 Python
Python 实现二叉查找树的示例代码
Dec 21 Python
Python 实现Mac 屏幕截图详解
Oct 05 Python
浅谈function(函数)中的动态参数
Apr 30 #Python
python脚本爬取字体文件的实现方法
Apr 29 #Python
Python在图片中添加文字的两种方法
Apr 29 #Python
Python实现对字符串的加密解密方法示例
Apr 29 #Python
Python实现通过文件路径获取文件hash值的方法
Apr 29 #Python
python基于pyDes库实现des加密的方法
Apr 29 #Python
Python简单实现Base64编码和解码的方法
Apr 29 #Python
You might like
echo(),print(),print_r()之间的区别?
2006/11/19 PHP
基于php和mysql的简单的dao类实现crud操作功能
2014/01/27 PHP
PHP文件读写操作相关函数总结
2014/11/18 PHP
ThinkPHP框架实现数据增删改
2017/05/07 PHP
PHP调用API接口实现天气查询功能的示例
2017/09/21 PHP
怎么让脚本或里面的函数在所有图片都载入完毕的时候执行
2006/10/17 Javascript
jQuery 白痴级入门教程
2009/11/11 Javascript
javascript 放大镜 v1.0 基于Yui2 实现的放大镜效果
2010/03/08 Javascript
js 优化次数过多的循环 考虑到性能问题
2011/03/05 Javascript
js获取网页可见区域、正文以及屏幕分辨率的高度
2014/05/15 Javascript
javascript实现点击后变换按钮显示文字的方法
2015/05/13 Javascript
jQuery unbind()方法实例详解
2016/01/19 Javascript
Node.js+Express配置入门教程
2016/05/19 Javascript
基于JavaScript实现在新的tab页打开url
2016/08/04 Javascript
AngularJS入门教程之过滤器用法示例
2016/11/02 Javascript
微信小程序实现的贪吃蛇游戏【附源码下载】
2018/01/03 Javascript
angular2模块和共享模块详解
2018/04/08 Javascript
如何在JavaScript中优雅的提取循环内数据详解
2019/03/04 Javascript
详解ES6中的Map与Set集合
2019/03/22 Javascript
自定义Vue中的v-module双向绑定的实现
2019/04/17 Javascript
开源一个微信小程序仪表盘组件过程解析
2019/07/30 Javascript
Python日期操作学习笔记
2008/10/07 Python
Python实现PS滤镜Fish lens图像扭曲效果示例
2018/01/29 Python
python3 图片 4通道转成3通道 1通道转成3通道 图片压缩实例
2019/12/03 Python
详解Python修复遥感影像条带的两种方式
2020/02/23 Python
python爬虫请求头设置代码
2020/07/28 Python
SKECHERS官方旗舰店:美国舒适运动休闲品牌
2017/12/22 全球购物
How TDD works
2012/09/30 面试题
八年级历史教学反思
2014/01/10 职场文书
社区七一党员活动方案
2014/01/25 职场文书
电气自动化专业职业规划范文
2014/02/16 职场文书
摄影展策划方案
2014/06/02 职场文书
开展读书活动总结
2014/06/30 职场文书
运动会广播稿诗歌版
2014/09/12 职场文书
黄埔军校观后感
2015/06/10 职场文书
CSS3实现360度循环旋转功能
2022/02/12 HTML / CSS