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中将字典转换为XML以及相关的命名空间解析
Oct 15 Python
微信 用脚本查看是否被微信好友删除
Oct 28 Python
Python读取图片为16进制表示简单代码
Jan 19 Python
django的csrf实现过程详解
Jul 26 Python
python-序列解包(对可迭代元素的快速取值方法)
Aug 24 Python
基于TensorFlow常量、序列以及随机值生成实例
Jan 04 Python
详解python中各种文件打开模式
Jan 19 Python
python读取csv文件指定行的2种方法详解
Feb 13 Python
jupyter notebook 参数传递给shell命令行实例
Apr 10 Python
Python定时任务APScheduler安装及使用解析
Aug 07 Python
K近邻法(KNN)相关知识总结以及如何用python实现
Jan 28 Python
python 中yaml文件用法大全
Jul 04 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 和 MySQL 基础教程(四)
2006/10/09 PHP
PHP,ASP.JAVA,JAVA代码格式化工具整理
2010/06/15 PHP
深入探讨<br />和 \r\n两者有什么区别??
2013/06/05 PHP
php简单获取复选框值的方法
2016/05/11 PHP
Laravel使用memcached缓存对文章增删改查进行优化的方法
2016/10/08 PHP
Phpstorm+Xdebug断点调试PHP的方法
2018/05/14 PHP
小议Javascript中的this指针
2010/03/18 Javascript
JS/Jquery判断对象为空的方法
2015/06/11 Javascript
javascript实现检验的各种规则
2015/07/31 Javascript
jquery实现漂亮的二级下拉菜单代码
2015/08/26 Javascript
nodejs实现bigpipe异步加载页面方案
2016/01/26 NodeJs
浅析JavaScript作用域链、执行上下文与闭包
2016/02/01 Javascript
如何消除inline-block属性带来的标签间间隙
2016/03/31 Javascript
canvas快速绘制圆形、三角形、矩形、多边形方法介绍
2016/12/29 Javascript
webpack+vue2构建vue项目骨架的方法
2018/01/09 Javascript
JS实现为动态创建的元素添加事件操作示例
2018/03/17 Javascript
Vue axios全局拦截 get请求、post请求、配置请求的实例代码
2018/11/28 Javascript
Vue 无限滚动加载指令实现方法
2019/05/28 Javascript
[42:27]DOTA2上海特级锦标赛主赛事日 - 3 败者组第三轮#2Fnatic VS OG第三局
2016/03/05 DOTA
python下setuptools的安装详解及No module named setuptools的解决方法
2017/07/06 Python
python虚拟环境virtualenv的安装与使用
2017/09/21 Python
Python使用pymongo模块操作MongoDB的方法示例
2018/07/20 Python
python使用turtle库绘制奥运五环
2020/02/24 Python
python 实现图片修复(可用于去水印)
2020/11/19 Python
html5文字阴影效果text-shadow使用示例
2013/07/25 HTML / CSS
美国在线乐器和设备商店:Musician’s Friend
2018/07/06 全球购物
上海天奕面试题笔试题
2015/04/19 面试题
超市仓管员岗位职责范本
2014/09/18 职场文书
委托函范文
2015/01/29 职场文书
五一劳动节活动总结
2015/02/09 职场文书
饭店服务员岗位职责
2015/02/09 职场文书
公司转让协议书
2016/03/19 职场文书
致毕业季:你如何做好自己的职业生涯规划书?
2019/07/01 职场文书
Angular CLI发布路径的配置项浅析
2021/03/29 Javascript
Python 快速验证代理IP是否有效的方法实现
2021/07/15 Python
java如何实现获取客户端ip地址的示例代码
2022/04/07 Java/Android