Python 操作MySQL详解及实例

发布时间 - 2026-01-11 00:54:29    点击率:

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  # 操作  # MySQL  # 对MySQL的操作  # python测试mysql写入性能完整实例  # python3.6连接MySQL和表的创建与删除实例代码  # python 3.6 +pyMysql 操作mysql数据库(实例讲解)  # Python如何实现MySQL实例初始化详解  # 在python3环境下的Django中使用MySQL数据库的实例  # Python操作使用MySQL数据库的实例代码  # Python实现Mysql数据库连接池实例详解  # python将字典内容存入mysql实例代码  # 都是  # 是一个  # 离线  # 希望能  # 较多  # 不支持  # 可选  # 它在  # 谢谢大家  # 第三方  # 来完成  # 而生  # 近两年  # 最棒  # 最老  # 主要有  # 而是要  # import  # host  # connect 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: 如何在局域网内绑定自建网站域名?  Laravel Eloquent性能优化技巧_Laravel N+1查询问题解决  如何撰写建站申请书?关键要点有哪些?  郑州企业网站制作公司,郑州招聘网站有哪些?  网站页面设计需要考虑到这些问题  Laravel Docker环境搭建教程_Laravel Sail使用指南  Internet Explorer官网直接进入 IE浏览器在线体验版网址  Laravel如何处理JSON字段_Eloquent原生JSON字段类型操作教程  SQL查询语句优化的实用方法总结  香港网站服务器数量如何影响SEO优化效果?  百度输入法ai面板怎么关 百度输入法ai面板隐藏技巧  Laravel如何实现API版本控制_Laravel API版本化路由设计策略  如何使用 Go 正则表达式精准提取括号内首个纯字母标识符(忽略数字与嵌套)  Laravel任务队列怎么用_Laravel Queues异步处理任务提升应用性能  香港服务器网站卡顿?如何解决网络延迟与负载问题?  电商网站制作多少钱一个,电子商务公司的网站制作费用计入什么科目?  Win11怎么关闭专注助手 Win11关闭免打扰模式设置【操作】  为什么要用作用域操作符_php中访问类常量与静态属性的优势【解答】  Laravel如何创建和注册中间件_Laravel中间件编写与应用流程  HTML 中动态设置元素 name 属性的正确语法详解  高端智能建站公司优选:品牌定制与SEO优化一站式服务  微博html5版本怎么弄发超话_超话进入入口及发帖格式要求【教程】  Laravel Seeder怎么填充数据_Laravel数据库填充器的使用方法与技巧  如何在Windows 2008云服务器安全搭建网站?  php增删改查怎么学_零基础入门php数据库操作必知基础【教程】  如何用JavaScript实现文本编辑器_光标和选区怎么处理  Laravel如何正确地在控制器和模型之间分配逻辑_Laravel代码职责分离与架构建议  高端云建站费用究竟需要多少预算?  如何快速生成可下载的建站源码工具?  Laravel的契約(Contracts)是什么_深入理解Laravel Contracts与依赖倒置  大连网站制作费用,大连新青年网站,五年四班里的视频怎样下载啊?  Laravel如何生成和使用数据填充?(Seeder和Factory示例)  如何在云主机上快速搭建多站点网站?  合肥制作网站的公司有哪些,合肥聚美网络科技有限公司介绍?  Laravel请求验证怎么写_Laravel Validator自定义表单验证规则教程  Android自定义listview布局实现上拉加载下拉刷新功能  Win11怎么关闭资讯和兴趣_Windows11任务栏设置隐藏小组件  jQuery中的100个技巧汇总  Win10如何卸载预装Edge扩展_Win10卸载Edge扩展教程【方法】  如何快速上传自定义模板至建站之星?  长沙企业网站制作哪家好,长沙水业集团官方网站?  Laravel路由怎么定义_Laravel核心路由系统完全入门指南  如何在不使用负向后查找的情况下匹配特定条件前的换行符  西安专业网站制作公司有哪些,陕西省建行官方网站?  Swift开发中switch语句值绑定模式  如何用狗爹虚拟主机快速搭建网站?  Laravel怎么为数据库表字段添加索引以优化查询  如何彻底卸载建站之星软件?  Bootstrap CSS布局之列表  Swift中switch语句区间和元组模式匹配