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日期操作学习笔记
Oct 07 Python
在Python的gevent框架下执行异步的Solr查询的教程
Apr 16 Python
python使用socket连接远程服务器的方法
Apr 29 Python
Python编程对列表中字典元素进行排序的方法详解
May 26 Python
python处理Excel xlrd的简单使用
Sep 12 Python
Python绘制3D图形
May 03 Python
python使用pipeline批量读写redis的方法
Feb 18 Python
详解Python 调用C# dll库最简方法
Jun 20 Python
Django 开发环境配置过程详解
Jul 18 Python
pandas 对日期类型数据的处理方法详解
Aug 08 Python
python3 selenium自动化 下拉框定位的例子
Aug 23 Python
scrapy爬虫:scrapy.FormRequest中formdata参数详解
Apr 30 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
基于数据库的在线人数,日访问量等统计
2006/10/09 PHP
在PHP中PDO解决中文乱码问题的一些补充
2010/09/06 PHP
100行PHP代码实现socks5代理服务器
2016/04/28 PHP
Ubuntu VPS中wordpress网站打开时提示”建立数据库连接错误”的解决办法
2016/11/03 PHP
php 7新特性之类型申明详解
2017/06/06 PHP
PHP中PCRE正则解析代码详解
2019/04/26 PHP
js 加载时自动调整图片大小
2008/05/28 Javascript
让mayfish支持mysqli数据库驱动的实现方法
2010/05/22 Javascript
关于html+ashx开发中几个问题的解决方法
2011/07/18 Javascript
node.js中的Socket.IO使用实例
2014/11/04 Javascript
dreamweaver 8实现Jquery自动提示
2014/12/04 Javascript
使用jQuery获得内容以及内容的属性
2015/02/26 Javascript
js实现省份下拉菜单效果
2017/02/15 Javascript
原生JS实现层叠轮播图
2017/05/17 Javascript
深入理解Vue transition源码分析
2017/07/30 Javascript
解析Json字符串的三种方法日常常用
2018/05/02 Javascript
详解用场景去理解函数柯里化(入门篇)
2019/04/11 Javascript
详解Vue3 Composition API中的提取和重用逻辑
2020/04/29 Javascript
Django应用程序中如何发送电子邮件详解
2017/02/04 Python
python可视化实现代码
2019/01/15 Python
python 实现图片旋转 上下左右 180度旋转的示例
2019/01/24 Python
使用Python控制摄像头拍照并发邮件
2019/04/23 Python
python 图片去噪的方法示例
2019/07/09 Python
Python如何实现定时器功能
2020/05/28 Python
python右对齐的实例方法
2020/07/05 Python
Python字符串的15个基本操作(小结)
2021/02/03 Python
CSS3关于z-index不生效问题的解决
2020/02/19 HTML / CSS
Java的类可以定义为Protected或者Private得吗
2015/09/25 面试题
药物学专业学生的自我评价
2013/10/27 职场文书
英语专业应届生求职信范文
2013/11/15 职场文书
岗位聘任书范文
2014/03/29 职场文书
2014标准社保办理委托书
2014/10/06 职场文书
幼儿园辞职信
2015/05/13 职场文书
2015年英语教师工作总结
2015/05/20 职场文书
职工食堂管理制度
2015/08/06 职场文书
导游词之上饶龟峰
2019/10/25 职场文书