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的垃圾回收机制深入分析
Jul 16 Python
Python中Collection的使用小技巧
Aug 18 Python
python自然语言编码转换模块codecs介绍
Apr 08 Python
利用python批量给云主机配置安全组的方法教程
Jun 21 Python
Python中的Numpy矩阵操作
Aug 12 Python
实例讲解python中的协程
Oct 08 Python
python处理两种分隔符的数据集方法
Dec 12 Python
python使用mitmproxy抓取浏览器请求的方法
Jul 02 Python
pandas条件组合筛选和按范围筛选的示例代码
Aug 26 Python
Pandas实现dataframe和np.array的相互转换
Nov 30 Python
Django多数据库配置及逆向生成model教程
Mar 28 Python
基于python实现查询ip地址来源
Jun 02 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
终于听上了直流胆调频
2021/03/02 无线电
php数组函数序列之array_keys() - 获取数组键名
2011/10/30 PHP
在Laravel中实现使用AJAX动态刷新部分页面
2019/10/15 PHP
常用简易JavaScript函数
2009/04/09 Javascript
仿jQuery的siblings效果的js代码
2011/08/09 Javascript
P3P Header解决Cookie跨域的问题
2013/03/12 Javascript
js中如何把字符串转化为对象、数组示例代码
2013/07/17 Javascript
jquery绑定事件不生效的解决方法
2014/02/11 Javascript
Javascript异步编程模型Promise模式详细介绍
2014/05/08 Javascript
Javascript基础教程之数据类型 (数值 Number)
2015/01/18 Javascript
简单纯js实现点击切换TAB标签实例
2015/08/23 Javascript
jQuery实现的左右移动焦点图效果
2016/01/14 Javascript
JS中取二维数组中最大值的方法汇总
2016/04/17 Javascript
AngularJS基础 ng-hide 指令用法及示例代码
2016/08/01 Javascript
Angular2 (RC5) 路由与导航详解
2016/09/21 Javascript
Vue.js创建Calendar日历效果
2016/11/03 Javascript
bootstrap——bootstrapTable实现隐藏列的示例
2017/01/14 Javascript
高效的jQuery代码编写技巧总结
2017/02/22 Javascript
vue 项目如何引入微信sdk接口的方法
2017/12/18 Javascript
webpack 样式加载的实现原理
2018/06/12 Javascript
在vue项目中封装echarts的步骤
2020/12/25 Vue.js
Python文件和目录操作详解
2015/02/08 Python
python 自动化将markdown文件转成html文件的方法
2016/09/23 Python
Python中实现switch功能实例解析
2018/01/11 Python
Python常见数据类型转换操作示例
2019/05/08 Python
python 随机生成10位数密码的实现代码
2019/06/27 Python
Django配置MySQL数据库的完整步骤
2019/09/07 Python
numpy ndarray 取出满足特定条件的某些行实例
2019/12/05 Python
Python爬虫爬取新闻资讯案例详解
2020/07/14 Python
python温度转换华氏温度实现代码
2020/12/06 Python
如何让IE9以下版本(ie6/7/8)认识html5元素
2013/04/01 HTML / CSS
美国电子产品购物网站:BuyDig.com
2020/06/17 全球购物
老公保证书
2015/01/17 职场文书
2015年政务公开工作总结
2015/05/19 职场文书
Window server中安装Redis的超详细教程
2021/11/17 Redis
Python PIL按比例裁剪图片
2022/05/11 Python