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使用rabbitmq实现网络爬虫示例
Feb 20 Python
用map函数来完成Python并行任务的简单示例
Apr 02 Python
python简单实现获取当前时间
Aug 27 Python
python中urlparse模块介绍与使用示例
Nov 19 Python
Python实现中一次读取多个值的方法
Apr 22 Python
python 中文件输入输出及os模块对文件系统的操作方法
Aug 27 Python
python检测IP地址变化并触发事件
Dec 26 Python
python3.7简单的爬虫实例详解
Jul 08 Python
python requests库爬取豆瓣电视剧数据并保存到本地详解
Aug 10 Python
使用Python+OpenCV进行卡类型及16位卡号数字的OCR功能
Aug 30 Python
基于Python实现射击小游戏的制作
Apr 06 Python
python热力图实现的完整实例
Jun 25 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
用PHP的ob_start();控制您的浏览器cache!
2006/11/25 PHP
PHP 第二节 数据类型之转换
2012/04/28 PHP
PHP 配置后台登录以及模板引入
2017/01/24 PHP
用htc组件制作windows选项卡
2007/01/13 Javascript
Javascript中的常见排序算法
2007/03/27 Javascript
精通Javascript系列之数据类型 字符串
2011/06/08 Javascript
JS+DIV实现鼠标划过切换层效果的实例代码
2013/11/26 Javascript
JS获取DropDownList的value值与text值的示例代码
2014/01/07 Javascript
jQuery中attr()和prop()在修改checked属性时的区别
2014/07/18 Javascript
将HTML格式的String转化为HTMLElement的实现方法
2014/08/07 Javascript
jQuery中contents()方法用法实例
2015/01/08 Javascript
Js 获取当前函数参数对象的实现代码
2016/06/20 Javascript
jQuery实现的自定义弹出层效果实例详解
2016/09/04 Javascript
利用Node.JS实现邮件发送功能
2016/10/21 Javascript
JS常用倒计时代码实例总结
2017/02/07 Javascript
Ajax基础知识详解
2017/02/17 Javascript
JavaScript实现网页头部进度条刷新
2017/04/16 Javascript
JS如何获取地址栏的参数实例讲解
2018/10/06 Javascript
微信小程序实现定位及到指定位置导航的示例代码
2019/08/20 Javascript
[47:50]Secret vs VP 2018国际邀请赛小组赛BO2 第二场 8.17
2018/08/20 DOTA
python函数装饰器用法实例详解
2015/06/04 Python
Python实现的下载网页源码功能示例
2017/06/13 Python
Python双精度浮点数运算并分行显示操作示例
2017/07/21 Python
浅析python实现scrapy定时执行爬虫
2018/03/04 Python
Python实现繁?转为简体的方法示例
2018/12/18 Python
浅谈移动端网页图片预加载方案
2018/11/05 HTML / CSS
美国运动鞋和服装网上商店:YCMC
2018/09/15 全球购物
商务英语专业毕业生自荐信
2013/11/05 职场文书
动漫专业高职生职业生涯规划书
2014/02/15 职场文书
国贸专业的职业规划书
2014/03/15 职场文书
2014年教师节演讲稿范文
2014/09/10 职场文书
镇副书记专题民主生活会对照检查材料思想汇报
2014/10/02 职场文书
2016年最美孝心少年事迹材料
2016/02/26 职场文书
JVM的类加载器和双亲委派模式你了解吗
2022/03/13 Java/Android
SpringBoot中HttpSessionListener的简单使用方式
2022/03/17 Java/Android
世界十大儿童漫画书排名,法国国宝漫画排第五,第二是轰动日本连环
2022/03/18 欧美动漫