【Python】基于pymysql的数据库操作类

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,高可用系列 2核4GB
简介: 一 简介      Python和MySQL交互的模块有 MySQLdb 和 PyMySQL(pymysql),MySQLdb是基于C 语言编写的,而且Python3 不在支持MySQLdb 。
一 简介
     Python和MySQL交互的模块有 MySQLdb 和 PyMySQL(pymysql),MySQLdb是基于C 语言编写的,而且Python3 不在支持MySQLdb 。PyMySQL是一个纯Python写的MySQL客户端,它的目标是替代MySQLdb,可以在CPython、PyPy、IronPython和Jython环境下运行,PyMySQL在MIT许可下发布。
    在开发基于Python语言的项目中,为了以后系统能兼容Python3,我们使用了PyMySQL替换了MySQLdb。下面我们来熟悉一下pymysql的使用。
 
二 安装方式
  pymsql的源码 https://github.com/PyMySQL/PyMySQL ,目前还在持续更新。
  1. 安装要求:
  2. Python -- one of the following:
  3.      CPython >= 2.6 or >= 3.3
  4.      PyPy >= 4.0
  5.      IronPython 2.7
  6. MySQL Server -- one of the following:
  7.      MySQL >= 4.1 (tested with only 5.5~)
  8.      MariaDB >= 5.1
  9. 安装
  10.   pip install PyMySQL
  相关文档 , 强烈建议大家仔细阅读一遍。其用法和MySQLdb相差无几,核心用法一致。这样使用pymysql替换mysqldb的成本极小。


三 基于pymysql的数据库交互

  1. #!/usr/bin/env python
  2. # encoding: utf-8
  3. """
  4. author: yangyi@youzan
  5. time: 2015/6/8 上午11:34
  6. func: 基于pymysql的数据库交互类,支持事务提交和回滚,返回结果记录行数,和insert的最新id
  7. """
  8. import pymysql
  9. from warnings import filterwarnings
  10. filterwarnings('ignore', category=pymysql.Warning)
  11. CONNECT_TIMEOUT = 100
  12. IP = 'localhost'
  13. PORT = 3306
  14. USER = 'root'
  15. PASSSWORD = ''

  16. class QueryException(Exception):
  17.     """
  18.     """


  19. class ConnectionException(Exception):
  20.     """
  21.     """

  22. class MySQL_Utils():
  23.     def __init__(
  24.             self, ip=IP, port=PORT, user=USER, password=PASSSWORD,
  25.             connect_timeout=CONNECT_TIMEOUT, remote=False, socket='', dbname='test'):
  26.         self.__conn = None
  27.         self.__cursor = None
  28.         self.lastrowid = None
  29.         self.connect_timeout = connect_timeout
  30.         self.ip = ip
  31.         self.port = port
  32.         self.user = user
  33.         self.password = password
  34.         self.mysocket = socket
  35.         self.remote = remote
  36.         self.db = dbname
  37.         self.rows_affected = 0


  38.     def __init_conn(self):
  39.         try:
  40.             conn = pymysql.connect(
  41.                     host=self.ip,
  42.                     port=int(self.port),
  43.                     user=self.user,
  44.                     db=self.db,
  45.                     connect_timeout=self.connect_timeout,
  46.                     charset='utf8', unix_socket=self.mysocket)
  47.         except pymysql.Error as e:
  48.             raise ConnectionException(e)
  49.         self.__conn = conn


  50.     def __init_cursor(self):
  51.         if self.__conn:
  52.             self.__cursor = self.__conn.cursor(pymysql.cursors.DictCursor)


  53.     def close(self):
  54.         if self.__conn:
  55.             self.__conn.close()
  56.             self.__conn = None

  57.     #专门处理select 语句
  58.     def exec_sql(self, sql, args=None):
  59.         try:
  60.             if self.__conn is None:
  61.                 self.__init_conn()
  62.                 self.__init_cursor()
  63.             self.__conn.autocommit = True
  64.             self.__cursor.execute(sql, args)
  65.             self.rows_affected = self.__cursor.rowcount
  66.             results = self.__cursor.fetchall()
  67.             return results
  68.         except pymysql.Error as e:
  69.             raise pymysql.Error(e)
  70.         finally:
  71.             if self.__conn:
  72.                 self.close()

  73.     # 专门处理dml语句 delete,updete,insert 
  74.     def exec_txsql(self, sql, args=None):
  75.         try:
  76.             if self.__conn is None:
  77.                 self.__init_conn()
  78.                 self.__init_cursor()
  79.             if self.__cursor is None:
  80.                 self.__init_cursor()


  81.             self.rows_affected=self.__cursor.execute(sql, args)
  82.             self.lastrowid = self.__cursor.lastrowid
  83.             return self.rows_affected
  84.         except pymysql.Error as e:
  85.             raise pymysql.Error(e)
  86.         finally:
  87.             if self.__cursor:
  88.                 self.__cursor.close()
  89.                 self.__cursor = None

  90.     # 提交
  91.     def commit(self):
  92.         try:
  93.             if self.__conn:
  94.                 self.__conn.commit()
  95.         except pymysql.Error as e:
  96.             raise pymysql.Error(e)
  97.         finally:
  98.             if self.__conn:
  99.                 self.close()

  100.     #回滚操作
  101.     def rollback(self):
  102.         try:
  103.             if self.__conn:
  104.                 self.__conn.rollback()
  105.         except pymysql.Error as e:
  106.             raise pymysql.Error(e)
  107.         finally:
  108.             if self.__conn:
  109.                 self.close()
  110.     # 适用于需要获取插入记录的主键自增id
  111.     def get_lastrowid(self):
  112.         return self.lastrowid
     #获取dml操作影响的行数
    def get_affectrows(self):
        return self.rows_affected
     #MySQL_Utils初始化的实例销毁之后,自动提交
     def __del__(self):
        self.commit()
四 小结
   前几天刚刚将我们的系统中的MySQLdb 替换为PyMySQL, 还未遇到问题。欢迎大家使用测试上述脚本,有问题欢迎和我讨论。 如果本文对您有帮助 ,可以赞助 一瓶饮料。




相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
28天前
|
关系型数据库 MySQL 数据库连接
python脚本:连接数据库,检查直播流是否可用
【10月更文挑战第13天】本脚本使用 `mysql-connector-python` 连接MySQL数据库,检查 `live_streams` 表中每个直播流URL的可用性。通过 `requests` 库发送HTTP请求,输出每个URL的检查结果。需安装 `mysql-connector-python` 和 `requests` 库,并配置数据库连接参数。
126 68
|
29天前
|
关系型数据库 MySQL 数据处理
探索Python中的异步编程:从asyncio到异步数据库操作
在这个快节奏的技术世界里,效率和性能是关键。本文将带你深入Python的异步编程世界,从基础的asyncio库开始,逐步探索到异步数据库操作的高级应用。我们将一起揭开异步编程的神秘面纱,探索它如何帮助我们提升应用程序的性能和响应速度。
|
1月前
|
Web App开发 SQL 数据库
使用 Python 解析火狐浏览器的 SQLite3 数据库
本文介绍如何使用 Python 解析火狐浏览器的 SQLite3 数据库,包括书签、历史记录和下载记录等。通过安装 Python 和 SQLite3,定位火狐数据库文件路径,编写 Python 脚本连接数据库并执行 SQL 查询,最终输出最近访问的网站历史记录。
|
1月前
|
索引 Python
python-类属性操作
【10月更文挑战第11天】 python类属性操作列举
21 1
|
1月前
|
Java C++ Python
Python基础---类
【10月更文挑战第10天】Python类的定义
25 2
|
1月前
|
SQL 机器学习/深度学习 数据采集
SQL与Python集成:数据库操作无缝衔接22.bijius.com
自动化数据预处理:使用Python库(如Pandas)自动清洗、转换和准备数据,为机器学习模型提供高质量输入。 实时数据处理:集成Apache Kafka或Amazon Kinesis等流处理系统,实现实时数据更新和分析。
WK
|
1月前
|
Python
Python类命名
在Python编程中,类命名至关重要,影响代码的可读性和维护性。建议使用大写驼峰命名法(如Employee),确保名称简洁且具描述性,避免使用内置类型名及单字母或数字开头,遵循PEP 8风格指南,保持项目内命名风格一致。
WK
14 0
|
1月前
|
SQL 关系型数据库 MySQL
Python中Pymysql库的常见用法和代码示例
`pymysql` 是一个用于连接 MySQL 数据库的 Python 库,支持 SQL 查询的执行和结果处理。通过 `pip install pymysql` 安装后,可使用 `connect()` 方法建立连接,`cursor()` 创建游标执行查询,包括数据的增删改查,并通过 `commit()` 和 `rollback()` 管理事务,最后需关闭游标和连接以释放资源。
76 0
|
1月前
|
SQL 机器学习/深度学习 数据采集
SQL与Python集成:数据库操作无缝衔接2a.bijius.com
Python与SQL的集成是现代数据科学和工程实践的核心。通过有效的数据查询、管理与自动化,可以显著提升数据分析和决策过程的效率与准确性。随着技术的不断发展,这种集成的应用场景将更加广泛,为数据驱动的创新提供更强大的支持。
|
1月前
|
SQL 机器学习/深度学习 数据库
SQL与Python集成:数据库操作无缝衔接
1. Python与SQL集成的关键步骤 在开始之前,确保你已经安装了必要的Python库,如`sqlite3`(用于SQLite数据库)或`psycopg2`(用于PostgreSQL数据库)。这些库提供了Python与SQL数据库之间的接口。
下一篇
无影云桌面