python 数据库mysql查询工具类

该博客介绍了一个Python工具类`HandleSql`,用于处理MySQL数据库的连接与查询操作。类中包含了建立连接、获取单条、多条及全部数据的方法,并提供了返回元组或字典类型数据的选项。调用方示例展示了如何配置数据库连接参数并使用工具类执行SQL查询获取所有数据。

1.工具类代码

#新建 tz_mysql.py
import pymysql
from pymysql.cursors import DictCursor


class HandleSql:

    def __init__(self, db_config):
        # 创建数据库连接
        # 根据不同的数据库,创建不同的链接
        # 如果engine没有值默认返回mysql
        engine = db_config.pop('engine', 'mysql')
        if engine.lower() == 'mysql':
            self.conn = pymysql.connect(**db_config)
        else:
            pass  # 此处可以配置其他的数据库

    def get_fetchone(self, sql, res_type='t'):
        """
        返回一条数据
        :param sql:
        :param size: 默认返回元组
        :return:
        """
        # 创建游标
        # 返回元组类型的数据
        if res_type == 't':
            with self.conn.cursor() as cursor:
                cursor.execute(sql)
                return cursor.fetchone()
        # 返回字典类型的数据
        else:
            with self.conn.cursor(DictCursor) as cursor:
                cursor.execute(sql)
                return cursor.fetchone()

    # 获取多个数据
    def get_fetchmany(self, sql, size, res_type='t'):
        if res_type == 't':
            with self.conn.cursor() as cursor:
                cursor.execute(sql)
                return cursor.fetchmany(size)
        # 返回字典类型的数据
        else:
            with self.conn.cursor(DictCursor) as cursor:
                cursor.execute(sql)
                return cursor.fetchmany(size)

    # 获取全部数据
    def get_fetchall(self, sql, res_type='t'):
        if res_type == 't':
            with self.conn.cursor() as cursor:
                cursor.execute(sql)
                return cursor.fetchall()
        # 返回字典类型的数据
        else:
            with self.conn.cursor(DictCursor) as cursor:
                cursor.execute(sql)
                return cursor.fetchall()

    def exist_sql(self, sql):
        if self.get_fetchone(sql):
            return True
        else:
            return False

    def __del__(self):
        self.conn.close()

2.调用方

from xxxx.tz_mysql import HandleSql

# 配置文件中db_config
db_config = {
    'host': '192.168.1.xx',  # 主机
    'user': 'xx',  # 用户名
    'password': 'xxx',  # 密码
    'port': 3306,  # 端口 3306
    'database': 'xxx'  # 数据库名
}

HandleSql(db_config).get_fetchall(sql='select * from xxx',res_type='')
<think>好的,用户需要找一个Python操作MySQL的库或工具类。首先,我得想想Python里常用的MySQL工具有哪些。记得最常用的是MySQLdb,不过可能只支持Python2,现在应该用PyMySQL替代了。然后还有SQLAlchemy,这是一个ORM工具,功能更强大,支持多种数据库,包括MySQL。另外,还有官方提供的mysql-connector-python,纯Python写的,兼容性好。 接下来要考虑用户的需求。用户可能想要直接执行SQL语句,或者希望用ORM来简化操作。如果是简单的操作,PyMySQL或者mysql-connector-python可能更直接。如果需要更复杂的数据库交互,比如对象关系映射,事务管理,连接池等,SQLAlchemy会更合适。此外,如果用户在使用Flask框架,可能还会提到Flask-SQLAlchemy,不过用户的问题里没有提到框架,所以暂时不提。 然后看用户提供的引用,里面提到了SQLAlchemy的几个引用,比如引用1和引用2、3,说明站内有相关资源,可能需要推荐SQLAlchemy。另外引用4提到迁移MySQL到openGauss,但可能和当前问题关联不大。不过用户明确问的是操作MySQL的工具,所以重点在SQLAlchemy和其他库。 需要比较这些库的特点。比如PyMySQL是纯Python实现,安装方便,适合简单操作;mysql-connector-python是官方驱动,可能更新及时;SQLAlchemy功能全面,适合复杂项目。还要提到它们的安装方式和使用示例,帮助用户快速上手。 用户可能需要代码示例,所以在回答里加入简单的连接和查询示例会更好。比如用PyMySQL建立连接、执行查询,以及用SQLAlchemy的ORM方式定义模型并进行操作。这样用户可以根据自己的项目需求选择。 另外,要确保回答结构清晰,分点介绍每个工具,说明优缺点,这样用户能对比选择。最后生成相关问题,帮助用户深入思考,比如性能优化、事务处理等。</think>### Python操作MySQL数据库的工具推荐 在Python生态中,有多个成熟的工具库可用于操作MySQL数据库。以下是三个主流工具的特点和使用方法: --- #### 1. **PyMySQL(纯Python驱动)** - **特点**:纯Python实现的MySQL客户端库,兼容Python 3,无需依赖MySQL官方C库。 - **适用场景**:轻量级操作、快速原型开发。 - **安装**: ```bash pip install pymysql ``` - **示例代码**: ```python import pymysql # 连接数据库 conn = pymysql.connect( host='localhost', user='root', password='password', database='test_db' ) # 执行查询 with conn.cursor() as cursor: cursor.execute("SELECT * FROM users") result = cursor.fetchall() print(result) # 提交事务并关闭连接 conn.commit() conn.close() ``` --- #### 2. **mysql-connector-python(官方驱动)** - **特点**:MySQL官方维护的Python驱动,支持最新MySQL协议和功能。 - **适用场景**:需要与MySQL深度兼容或使用高级功能的场景。 - **安装**: ```bash pip install mysql-connector-python ``` - **示例代码**: ```python import mysql.connector # 连接数据库 conn = mysql.connector.connect( host='localhost', user='root', password='password', database='test_db' ) # 执行插入操作 cursor = conn.cursor() cursor.execute("INSERT INTO users (name, age) VALUES (%s, %s)", ('Alice', 30)) conn.commit() ``` --- #### 3. **SQLAlchemy(ORM工具)** - **特点**:功能强大的ORM(对象关系映射)库,支持事务管理、连接池和多种数据库方言(包括MySQL)[^1]。 - **适用场景**:复杂业务逻辑、需要抽象数据库操作的企业级应用。 - **安装**: ```bash pip install sqlalchemy ``` - **示例代码(ORM模式)**: ```python from sqlalchemy import create_engine, Column, Integer, String from sqlalchemy.ext.declarative import declarative_base from sqlalchemy.orm import sessionmaker # 定义模型 Base = declarative_base() class User(Base): __tablename__ = 'users' id = Column(Integer, primary_key=True) name = Column(String(50)) age = Column(Integer) # 连接数据库 engine = create_engine('mysql+pymysql://root:password@localhost/test_db') Session = sessionmaker(bind=engine) session = Session() # 查询数据 users = session.query(User).filter(User.age > 25).all() ``` --- #### **工具对比** | 工具 | 类型 | 优点 | 缺点 | |---------------------|------------|-------------------------------|-----------------------| | PyMySQL | 直接驱动 | 轻量、简单易用 | 性能低于C扩展库 | | mysql-connector-python | 官方驱动 | 官方支持、功能完整 | 依赖较多 | | SQLAlchemy | ORM框架 | 高度抽象、支持复杂操作[^1][^3]| 学习曲线较陡 | --- ### 选择建议 - **直接操作SQL**:推荐`PyMySQL`或`mysql-connector-python`。 - **复杂业务逻辑**:优先选择`SQLAlchemy`,利用ORM简化开发[^2]。 - **事务与连接池**:SQLAlchemy内置事务管理和连接池功能,适合高并发场景。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值