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常规方法实现数组的全排列
Mar 17 Python
Python爬虫实例_利用百度地图API批量获取城市所有的POI点
Jan 10 Python
hmac模块生成加入了密钥的消息摘要详解
Jan 11 Python
PyQt5主窗口动态加载Widget实例代码
Feb 07 Python
Pycharm设置去除显示的波浪线方法
Oct 28 Python
详解python-图像处理(映射变换)
Mar 22 Python
python cv2在验证码识别中应用实例解析
Dec 25 Python
pytorch forward两个参数实例
Jan 17 Python
Python list运算操作代码实例解析
Jan 20 Python
python 实现在shell窗口中编写print不向屏幕输出
Feb 19 Python
如何利用pycharm进行代码更新比较
Nov 04 Python
通过Python把学姐照片做成拼图游戏
Feb 15 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
PHP4 与 MySQL 数据库操作函数详解
2006/10/09 PHP
php在服务器执行exec命令失败的解决方法
2012/03/03 PHP
浅析php学习的路线图
2013/07/10 PHP
php禁止直接从浏览器输入地址访问.php文件的方法
2014/11/04 PHP
PHP测试框架PHPUnit组织测试操作示例
2018/05/28 PHP
PHP实现的微信APP支付功能示例【基于TP5框架】
2019/09/16 PHP
js继承 Base类的源码解析
2008/12/30 Javascript
jquery 插件学习(二)
2012/08/06 Javascript
javascript读取Xml文件做一个二级联动菜单示例
2014/03/17 Javascript
javascript获取函数名称、函数参数、对象属性名称的代码实例
2014/04/12 Javascript
js限制checkbox选中个数以限制六个为例
2014/07/15 Javascript
js实现适用于素材网站的黑色多级菜单导航条效果
2015/08/24 Javascript
浅谈几种常用的JS类定义方法
2016/06/08 Javascript
深入浅析Vue不同场景下组件间的数据交流
2017/08/15 Javascript
react同构实践之实现自己的同构模板
2019/03/13 Javascript
JS实现骰子3D旋转效果
2019/10/24 Javascript
Vue之封装公用变量以及实现方式
2020/07/31 Javascript
在Python的一段程序中如何使用多次事件循环详解
2017/09/07 Python
基于wxPython的GUI实现输入对话框(1)
2019/02/27 Python
python实现的自动发送消息功能详解
2019/08/15 Python
python爬虫爬取监控教务系统的思路详解
2020/01/08 Python
pytorch常见的Tensor类型详解
2020/01/15 Python
浅谈Selenium+Webdriver 常用的元素定位方式
2021/01/13 Python
CSS3之背景尺寸Background-size使用介绍
2013/10/14 HTML / CSS
巧克力领导品牌瑞士莲美国官网:Lindt Chocolate美国
2016/08/25 全球购物
英国假发网站:Hothair
2018/02/23 全球购物
日本快乐生活方式购物网站:Shop Japan
2018/07/17 全球购物
匈牙利超级网上商店和优惠:Alza.hu
2019/12/17 全球购物
Ticketmaster意大利:音乐会、节日、艺术和剧院的官方门票
2019/12/23 全球购物
本科生详细的自我评价
2013/09/19 职场文书
竞聘自述材料
2014/08/25 职场文书
小学开学典礼新闻稿
2015/07/17 职场文书
2016年万圣节活动个人总结
2016/04/05 职场文书
解决Tkinter中button按钮未按却主动执行command函数的问题
2021/05/23 Python
SpringAop日志找不到方法的处理
2021/06/21 Java/Android
Oracle 触发器trigger使用案例
2022/02/24 Oracle