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 tkinter实现的图片移动碰撞动画效果【附源码下载】
Jan 04 Python
python实现泊松图像融合
Jul 26 Python
对Python中plt的画图函数详解
Nov 07 Python
django admin组件使用方法详解
Jul 19 Python
Django shell调试models输出的SQL语句方法
Aug 29 Python
python进程间通信Queue工作过程详解
Nov 01 Python
在django中使用apscheduler 执行计划任务的实现方法
Feb 11 Python
python3安装OCR识别库tesserocr过程图解
Apr 02 Python
python如何将图片转换素描画
Sep 08 Python
Pycharm Git 设置方法
Sep 15 Python
Django执行源生mysql语句实现过程解析
Nov 12 Python
Python 里最强的地图绘制神器
Mar 01 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/24 PHP
javascript之更有效率的字符串替换
2008/08/02 Javascript
javascript 清空form表单中某种元素的值
2009/12/26 Javascript
validator验证控件使用代码
2010/11/23 Javascript
ASP中Sub和Function的区别说明
2020/08/30 Javascript
基于jquery的多功能软键盘插件
2012/07/25 Javascript
禁用页面部分JavaScript方法的具体实现
2013/07/31 Javascript
IE网页js语法错误2行字符1、FF中正常的解决方法
2013/09/09 Javascript
用javascript读取xml文件读取节点数据
2014/08/12 Javascript
为什么Node.js会这么火呢?Node.js流行的原因
2014/12/01 Javascript
js实现创建删除html元素小结
2015/09/30 Javascript
JavaScript驾驭网页-CSS与DOM
2016/03/24 Javascript
jquery html动态添加的元素绑定事件详解
2016/05/24 Javascript
BootStrapValidator校验方式
2016/12/19 Javascript
微信小程序跳转到其他网页(外部链接)的实现方法
2019/09/20 Javascript
解决layui下拉框监听问题(监听不到值的变化)
2019/09/28 Javascript
vue点击页面空白处实现保存功能
2019/11/06 Javascript
JavaScript实现HTML导航栏下拉菜单
2020/11/25 Javascript
开源Web应用框架Django图文教程
2017/03/09 Python
Python编程使用tkinter模块实现计算器软件完整代码示例
2017/11/29 Python
python游戏地图最短路径求解
2019/01/16 Python
NumPy 基本切片和索引的具体使用方法
2019/04/24 Python
python的几种矩阵相乘的公式详解
2019/07/10 Python
pygame实现俄罗斯方块游戏(对战篇1)
2019/10/29 Python
python实现udp聊天窗口
2020/03/31 Python
Django基于客户端下载文件实现方法
2020/04/21 Python
Python中的整除和取模实例
2020/06/03 Python
Python基于template实现字符串替换
2020/11/27 Python
python绘制高斯曲线
2021/02/19 Python
德国大型和小型家用电器网上商店:Energeto
2019/05/15 全球购物
2014年应届大学生毕业自我鉴定
2014/01/31 职场文书
毕业评语大全
2014/05/04 职场文书
公司领导班子召开党的群众路线教育实践活动总结大会新闻稿
2014/10/21 职场文书
买房协议书范本
2014/10/23 职场文书
幼儿园大班开学寄语(2016秋季)
2015/12/03 职场文书
基于PyTorch实现一个简单的CNN图像分类器
2021/05/29 Python