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迭代用法实例教程
Sep 08 Python
剖析Django中模版标签的解析与参数传递
Jul 21 Python
python分割列表(list)的方法示例
May 07 Python
python中实现k-means聚类算法详解
Nov 11 Python
python 批量修改/替换数据的实例
Jul 25 Python
python多线程分块读取文件
Aug 29 Python
Python解释器以及PyCharm的安装教程图文详解
Feb 26 Python
Jupyter Notebook的连接密码 token查询方式
Apr 21 Python
python基于win32api实现键盘输入
Dec 09 Python
MoviePy常用剪辑类及Python视频剪辑自动化
Dec 18 Python
解决selenium+Headless Chrome实现不弹出浏览器自动化登录的问题
Jan 09 Python
基于PyTorch中view的用法说明
Mar 03 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
THINKPHP+JS实现缩放图片式截图的实现
2010/03/07 PHP
PHP命名空间(namespace)的使用基础及示例
2014/08/18 PHP
简单介绍win7下搭建apache+php+mysql开发环境
2015/08/06 PHP
YII Framework教程之异常处理详解
2016/03/14 PHP
php简单实现sql防注入的方法
2016/04/22 PHP
Avengerls vs KG BO3 第三场2.18
2021/03/10 DOTA
用javascript实现画板的代码
2007/09/05 Javascript
通用JS事件写法实现代码
2009/01/07 Javascript
jQuery实现等比例缩放大图片让大图片自适应页面布局
2013/10/16 Javascript
JQuery限制复选框checkbox可选中个数的方法
2015/04/20 Javascript
详解如何将angular-ui的图片轮播组件封装成一个指令
2017/05/09 Javascript
JS库之ParticlesJS使用简介
2017/09/12 Javascript
vue .js绑定checkbox并获取、改变选中状态的实例
2018/08/24 Javascript
node中实现删除目录的几种方法
2019/06/24 Javascript
js实现鼠标滑动到某个div禁止滚动
2020/09/17 Javascript
[00:33]2016完美“圣”典风云人物:Sccc宣传片
2016/12/03 DOTA
python控制台中实现进度条功能
2015/11/10 Python
使用Python自动化破解自定义字体混淆信息的方法实例
2019/02/13 Python
Pycharm plot独立窗口显示的操作
2020/12/11 Python
HTML5学习笔记之History API
2015/02/26 HTML / CSS
澳大利亚儿童精品仓库:Goo & Co.
2019/06/20 全球购物
Guess欧洲官网:美国服饰品牌
2019/08/06 全球购物
简单说下OSPF的操作过程
2014/08/13 面试题
Shell编程面试题
2016/05/29 面试题
大学生求职简历的自我评价范文
2013/10/12 职场文书
师范学院美术系毕业生自我鉴定
2014/01/29 职场文书
群众路线教育实践活动心得体会
2014/03/07 职场文书
副总经理任命书
2014/06/05 职场文书
老公保证书
2015/01/17 职场文书
2015教师年度考核评语
2015/03/25 职场文书
浅谈vue2的$refs在vue3组合式API中的替代方法
2021/04/18 Vue.js
使用golang编写一个并发工作队列
2021/05/08 Golang
关于flex 上下文中自动 margin的问题(完整例子)
2021/05/20 HTML / CSS
如何避免mysql启动时错误及sock文件作用分析
2022/01/22 MySQL
SQL Server使用导出向导功能
2022/04/08 SQL Server
Python万能模板案例之matplotlib绘制甘特图
2022/04/13 Python