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用GET方法上传文件
Mar 10 Python
编写Python脚本使得web页面上的代码高亮显示
Apr 24 Python
Python3之简单搭建自带服务器的实例讲解
Jun 04 Python
python+webdriver自动化环境搭建步骤详解
Jun 03 Python
python字典一键多值实例代码分享
Jun 14 Python
解决Tensorflow 内存泄露问题
Feb 05 Python
python列表切片和嵌套列表取值操作详解
Feb 27 Python
Tensorflow中的降维函数tf.reduce_*使用总结
Apr 20 Python
Python代码中如何读取键盘录入的值
May 27 Python
Python中如何引入第三方模块
May 27 Python
增大python字体的方法步骤
Jul 05 Python
Python中 range | np.arange | np.linspace三者的区别
Mar 22 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
缅甸的咖啡简史
2021/03/04 咖啡文化
PHP 危险函数解释 分析
2009/04/22 PHP
PHP实现批量重命名某个文件夹下所有文件的方法
2017/09/04 PHP
javascript 冒泡排序 正序和倒序实现代码
2010/12/14 Javascript
Extjs4 关于Store的一些操作(加载/回调/添加)
2013/04/18 Javascript
jquery html动态生成select标签出问题的解决方法
2013/11/20 Javascript
页面实时更新时间的JS实例代码
2013/12/18 Javascript
JS中如何判断传过来的JSON数据中是否存在某字段
2014/08/18 Javascript
整理JavaScript对DOM中各种类型的元素的常用操作
2016/05/05 Javascript
jquery层级选择器(匹配父元素下的子元素实现代码)
2016/09/05 Javascript
jQuery滚动监听实现商城楼梯式导航效果
2017/03/06 Javascript
JavaScript获取tr td 的三种方式全面总结(推荐)
2017/08/15 Javascript
利用vue组件自定义v-model实现一个Tab组件方法示例
2017/12/06 Javascript
JavaScript面试出现频繁的一些易错点整理
2018/03/29 Javascript
VScode格式化ESlint方法(最全最好用方法)
2019/09/10 Javascript
解决layer弹出层自适应页面大小的问题
2019/09/16 Javascript
[02:49]DOTA2完美大师赛首日观众采访
2017/11/23 DOTA
详解Python的单元测试
2015/04/28 Python
Python字符串格式化
2015/06/15 Python
Python使用PIL库实现验证码图片的方法
2016/03/11 Python
利用python脚本如何简化jar操作命令
2019/02/24 Python
python 装饰器的使用示例
2020/10/10 Python
利用python查看数组中的所有元素是否相同
2021/01/08 Python
HTML5中的网络存储实现方式
2020/04/28 HTML / CSS
戴尔美国官方折扣店:Dell Outlet
2018/02/13 全球购物
毕业生自荐信
2013/12/14 职场文书
2014年六一儿童节演讲稿
2014/05/23 职场文书
优秀毕业生自荐信
2014/06/10 职场文书
代理人委托书
2014/08/01 职场文书
会计个人实习计划书
2014/08/15 职场文书
大学竞选班干部演讲稿
2014/08/21 职场文书
2014年设计师工作总结
2014/11/25 职场文书
2015年社区工作总结
2015/04/08 职场文书
python编程学习使用管道Pipe编写优化代码
2021/11/20 Python
MySQL分区路径子分区再分区
2022/04/13 MySQL
PYTHON 使用 Pandas 删除某列指定值所在的行
2022/04/28 Python