Python实战:轻松操作MySQL并打印SQL语句

python操作mysql打印sql

时间:2025-07-25 03:17


Python操作MySQL并打印SQL语句:高效、灵活与可维护性的完美结合 在当今数据驱动的时代,数据库操作是任何应用程序中不可或缺的一部分

    MySQL,作为一款开源的关系型数据库管理系统(RDBMS),凭借其高性能、可靠性和易用性,成为了众多开发者的首选

    而Python,作为一门高级编程语言,以其简洁的语法、强大的库支持和广泛的应用场景,在数据处理和自动化任务中表现出色

    将Python与MySQL结合,不仅能够实现高效的数据操作,还能通过打印SQL语句增强调试和可维护性

    本文将深入探讨如何使用Python操作MySQL数据库,并优雅地打印SQL语句,以实现高效、灵活且可维护的代码

     一、环境准备:安装必要的库 在使用Python操作MySQL之前,我们需要安装`mysql-connector-python`库,它是MySQL官方提供的Python连接器,支持最新的MySQL服务器版本,并且提供了完整的数据库连接、查询、执行等功能

    可以通过pip轻松安装: bash pip install mysql-connector-python 此外,为了打印SQL语句,虽然`mysql-connector-python`本身不提供直接的SQL日志功能,但我们可以利用Python的日志系统或自行封装函数来实现这一需求

     二、建立数据库连接 在使用Python与MySQL交互之前,首先需要建立数据库连接

    `mysql-connector-python`提供了`connect()`函数来完成这一任务

    以下是一个简单的连接示例: python import mysql.connector from mysql.connector import Error def create_connection(host_name, user_name, user_password, db_name): connection = None try: connection = mysql.connector.connect( host=host_name, user=user_name, passwd=user_password, database=db_name ) print(Connection to MySQL DB successful) except Error as e: print(fThe error{e} occurred) return connection 使用示例 connection = create_connection(localhost, root, password, mydatabase) 在这个例子中,我们定义了一个`create_connection`函数,它接受数据库的主机名、用户名、密码和数据库名作为参数,并尝试建立连接

    如果连接成功,将打印一条成功消息;否则,将捕获并打印错误信息

     三、执行SQL语句并打印 接下来,我们需要编写函数来执行SQL语句,并打印这些语句以便于调试和记录

    为了演示这一点,我们将创建两个函数:一个用于执行查询(返回结果),另一个用于执行非查询操作(如INSERT、UPDATE、DELETE)

     执行查询并打印SQL python import logging 配置日志记录 logging.basicConfig(level=logging.INFO, format=%(asctime)s -%(levelname)s -%(message)s) def execute_query(connection, query): cursor = connection.cursor(dictionary=True) try: logging.info(fExecuting query:{query}) cursor.execute(query) result = cursor.fetchall() return result except Error as e: print(fThe error{e} occurred) finally: cursor.close() 使用示例 query = SELECTFROM mytable result = execute_query(connection, query) for row in result: print(row) 在这个例子中,我们使用Python的`logging`模块来记录SQL语句

    通过设置日志级别为INFO,我们可以捕获并打印所有INFO级别的日志,包括我们的SQL语句

    `cursor.fetchall()`用于获取查询结果,并以字典形式返回,便于后续处理

     执行非查询操作并打印SQL python def execute_non_query(connection, query): cursor = connection.cursor() try: logging.info(fExecuting non-query:{query}) cursor.execute(query) connection.commit() except Error as e: print(fThe error{e} occurred) connection.rollback() finally: cursor.close() 使用示例 insert_query = INSERT INTO mytable(column1, column2) VALUES(%s, %s) values =(value1, value2) execute_non_query(connection, insert_query, values) 注意:此处示例代码有误,需调整以传递参数 注意:上面的execute_non_query函数示例存在一个问题,即直接传递了查询字符串和参数,但没有在`execute`方法中正确绑定参数

    正确的做法应该是使用参数化查询来防止SQL注入攻击,如下所示: python def execute_non_query(connection, query, params): cursor = connection.cursor() try: logging.info(fExecuting non-query:{query} with params:{params}) cursor.execute(query, params) connection.commit() except Error as e: print(fThe error{e} occurred) connection.rollback() finally: cursor.close() 使用修正后的示例 execute_non_query(connection, insert_query, values) 在这个修正后的版本中,我们通过`cursor.execute(query, params)`正确地传递了参数,同时日志中也记录了参数信息,尽管在实际生产环境中,出于安全考虑,可能不希望将敏感信息(如密码)记录到日志中

     四、关闭数据库连接 最后,不要忘记在操作完