python使用pymysql

为了封装这个数据库操作为一个通用方法,我们可以创建一个函数,该函数接受数据库连接参数(如主机名、用户名、密码、数据库名)、SQL语句以及必要的参数(用于参数化查询)。下面是一个简单的封装示例:

python 复制代码
import pymysql

def execute_query(host, user, password, db, query, params=None, charset='utf8mb4'):
    """
    执行SQL查询并返回结果。

    :param host: 数据库主机名
    :param user: 数据库用户名
    :param password: 数据库密码
    :param db: 数据库名
    :param query: SQL查询语句
    :param params: 用于参数化查询的参数元组,默认为None
    :param charset: 字符集,默认为'utf8mb4'
    :return: 查询结果
    """
    try:
        # 建立数据库连接
        connection = pymysql.connect(host=host, user=user, password=password, db=db, charset=charset)
        
        with connection.cursor() as cursor:
            # 执行SQL语句
            cursor.execute(query, params)
            
            # 获取查询结果
            result = cursor.fetchall()
            
            # 返回查询结果
            return result
    
    except pymysql.MySQLError as e:
        print(f"数据库错误: {e}")
        return None
    
    finally:
        # 关闭数据库连接
        if connection:
            connection.close()

# 使用示例
if __name__ == "__main__":
    host = 'localhost'
    user = 'user'
    password = 'passwd'
    db = 'db'
    query = "SELECT `id`, `name` FROM `users` WHERE `age` > %s"
    params = (18,)
    
    result = execute_query(host, user, password, db, query, params)
    if result:
        for row in result:
            print(row)
    else:
        print("没有查询到结果")

这个函数execute_query接受必要的数据库连接信息和SQL查询语句,以及可选的参数元组用于参数化查询。它执行查询并返回结果。如果发生数据库错误(如连接问题或SQL语句错误),它会打印错误消息并返回None。最后,它确保数据库连接在使用后被正确关闭。

请注意,在实际应用中,您可能还需要处理其他类型的异常,比如网络问题导致的连接中断等。此外,对于需要提交更改的SQL语句(如INSERT、UPDATE、DELETE),您可能需要在with块内调用connection.commit()来提交更改。但在这个例子中,我们只处理查询操作,因此不需要提交更改。

相关推荐
百结2144 小时前
Mysql数据库操作
数据库·mysql·oracle
keep one's resolveY5 小时前
时区问题解决
数据库
Leinwin5 小时前
OpenClaw 多 Agent 协作框架的并发限制与企业化规避方案痛点直击
java·运维·数据库
qq_417695055 小时前
机器学习与人工智能
jvm·数据库·python
漫随流水5 小时前
旅游推荐系统(view.py)
前端·数据库·python·旅游
ego.iblacat5 小时前
MySQL 服务基础
数据库·mysql
yy我不解释6 小时前
关于comfyui的mmaudio音频生成插件时时间不一致问题(一)
python·ai作画·音视频·comfyui
Maverick067 小时前
Oracle Redo 日志操作手册
数据库·oracle
紫丁香7 小时前
AutoGen详解一
后端·python·flask
FreakStudio7 小时前
不用费劲编译ulab了!纯Mpy矩阵micronumpy库,单片机直接跑
python·嵌入式·边缘计算·电子diy