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 相关文章推荐
利用aardio给python编写图形界面
Aug 21 Python
PyQt5每天必学之工具提示功能
Apr 19 Python
基于anaconda下强大的conda命令介绍
Jun 11 Python
python 读取文本文件的行数据,文件.splitlines()的方法
Jul 12 Python
Python os.access()用法实例
Feb 18 Python
python切片(获取一个子列表(数组))详解
Aug 09 Python
pytorch实现focal loss的两种方式小结
Jan 02 Python
python 递归调用返回None的问题及解决方法
Mar 16 Python
Python实现一个简单的递归下降分析器
Aug 01 Python
Django 用户认证Auth组件的使用
Nov 30 Python
Python采集爬取京东商品信息和评论并存入MySQL
Apr 12 Python
总结三种用 Python 作为小程序后端的方式
May 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
php实现网站插件机制的方法
2009/11/10 PHP
php截取字符串函数substr,iconv_substr,mb_substr示例以及优劣分析
2014/06/10 PHP
PHP面向对象程序设计实例分析
2016/01/26 PHP
linux平台编译安装PHP7并安装Redis扩展与Swoole扩展实例教程
2016/09/30 PHP
PHP使用正则表达式实现过滤非法字符串功能示例
2018/06/04 PHP
PHP绕过open_basedir限制操作文件的方法
2018/06/10 PHP
PHP调用接口API封装的例子
2019/10/11 PHP
有关PHP 中 config.m4 的探索
2020/08/26 PHP
Microsoft Ajax Minifier 压缩javascript的方法
2010/03/05 Javascript
匹配任意字符的正则表达式写法
2010/04/29 Javascript
基于jquery的下拉框改变动态添加和删除表格实现代码
2020/09/12 Javascript
javascript预加载图片、css、js的方法示例介绍
2013/10/14 Javascript
js实现div弹出层的方法
2014/11/20 Javascript
针对初学者的jQuery入门指南
2015/08/15 Javascript
浅析Bootstrap组件之面板组件
2016/05/04 Javascript
JS实现鼠标移上去显示图片或微信二维码
2016/12/14 Javascript
Node.js开发第三方微信公众平台
2017/06/05 Javascript
angularJs自定义过滤器实现手机号信息隐藏的方法
2018/10/08 Javascript
Vue 重置组件到初始状态的方法示例
2018/10/10 Javascript
如何使用CSS3和JQuery easing 插件制作绚丽菜单
2019/06/18 jQuery
vue开发简单上传图片功能
2020/06/30 Javascript
关于vue 结合原生js 解决echarts resize问题
2020/07/26 Javascript
[01:02:54]完美世界DOTA2联赛PWL S2 FTD vs GXR 第一场 11.22
2020/11/26 DOTA
Python中SOAP项目的介绍及其在web开发中的应用
2015/04/14 Python
Python 编码Basic Auth使用方法简单实例
2017/05/25 Python
Python基于百度AI的文字识别的示例
2018/04/21 Python
python批量修改图片尺寸,并保存指定路径的实现方法
2019/07/04 Python
python 发送get请求接口详解
2020/11/17 Python
python爬取招聘要求等信息实例
2020/11/20 Python
python 监控服务器是否有人远程登录(详细思路+代码)
2020/12/18 Python
微信小程序之html5 canvas绘图并保存到系统相册
2019/06/20 HTML / CSS
HTML5 图片预加载的示例代码
2020/03/25 HTML / CSS
幸福家庭标语
2014/06/27 职场文书
县政府领导班子四风问题对照检查材料思想汇报
2014/09/26 职场文书
python实现三阶魔方还原的示例代码
2021/04/28 Python
用Python selenium实现淘宝抢单机器人
2021/06/18 Python