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的框架下的web app的详细教程
Apr 30 Python
Python中的with...as用法介绍
May 28 Python
python django 增删改查操作 数据库Mysql
Jul 27 Python
python使用tensorflow深度学习识别验证码
Apr 03 Python
Python实现按照指定要求逆序输出一个数字的方法
Apr 19 Python
python微信好友数据分析详解
Nov 19 Python
很酷的python表白工具 你喜欢我吗
Apr 11 Python
Python中查看变量的类型内存地址所占字节的大小
Jun 26 Python
python接口调用已训练好的caffe模型测试分类方法
Aug 26 Python
pygame库实现移动底座弹球小游戏
Apr 14 Python
pytorch 实现cross entropy损失函数计算方式
Jan 02 Python
PyCharm设置注释字体颜色以及是否倾斜的操作
Sep 16 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 ci框架中加载css和js文件失败的解决方法
2014/03/03 PHP
PHP文件生成的图片无法使用CDN缓存的解决方法
2015/06/20 PHP
thinkPHP5框架自定义验证器实现方法分析
2018/06/11 PHP
Jquery.TreeView结合ASP.Net和数据库生成菜单导航条
2010/08/27 Javascript
JavaScript中的document.referrer在各种浏览器测试结果
2014/07/18 Javascript
浅谈Javascript中深复制
2014/12/01 Javascript
JS+CSS实现Li列表隔行换色效果的方法
2015/02/16 Javascript
JS实现仿雅虎首页快捷登录入口及导航模块效果
2015/09/19 Javascript
jquery ui dialog替代confirm实例分析
2016/01/25 Javascript
JavaScript重定向URL参数的两种方法小结
2016/10/19 Javascript
详解自动生成博客目录案例
2016/12/09 Javascript
Vue.js:使用Vue-Router 2实现路由功能介绍
2017/02/22 Javascript
vue响应式系统之observe、watcher、dep的源码解析
2019/04/09 Javascript
深入浅出 Vue 系列 -- 数据劫持实现原理
2019/04/23 Javascript
Layui 带多选框表格监听事件以及按钮自动点击写法实例
2019/09/02 Javascript
关于vue 结合原生js 解决echarts resize问题
2020/07/26 Javascript
解决Vue-Router升级导致的Uncaught (in promise)问题
2020/08/07 Javascript
Vue+Element ui 根据后台返回数据设置动态表头操作
2020/09/21 Javascript
微信小程序实现打卡签到页面
2020/09/21 Javascript
Python2.7读取PDF文件的方法示例
2017/07/13 Python
利用标准库fractions模块让Python支持分数类型的方法详解
2017/08/11 Python
Python cookbook(数据结构与算法)字典相关计算问题示例
2018/02/18 Python
Python爬虫使用Selenium+PhantomJS抓取Ajax和动态HTML内容
2018/02/23 Python
解决Pycharm 包已经下载,但是运行代码提示找不到模块的问题
2019/08/31 Python
tensorflow如何继续训练之前保存的模型实例
2020/01/21 Python
Tensorflow进行多维矩阵的拆分与拼接实例
2020/02/07 Python
Python本地及虚拟解释器配置过程解析
2020/10/13 Python
Html5跳转到APP指定页面的实现
2020/01/14 HTML / CSS
很酷的小工具和电子产品商城:GearBest
2016/11/19 全球购物
日本酒店、民宿、温泉旅馆、当地旅行团中文预订:e路东瀛
2019/12/09 全球购物
自我鉴定范文300字
2013/10/01 职场文书
文科教师毕业的自我评价
2014/01/16 职场文书
体育教师自我鉴定
2014/02/12 职场文书
交通事故私了协议书
2014/04/16 职场文书
2016简单的租房合同范本
2016/03/18 职场文书
《蓝鲸的眼睛》读后感5篇
2020/01/15 职场文书