You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何打印或记录Django中实际执行的SQL语句?求实现方法

嘿,我来帮你解决这个ORM SQL语句记录的问题!想要像Django那样随时查看或记录实际执行的SQL,其实大部分主流ORM都有现成的方法,可能你没挖到对应的文档细节,下面分几种情况给你讲清楚:

一、单次调试:直接从查询对象提取SQL

如果只是临时调试某条查询,直接从ORM的查询实例里获取生成好的SQL是最快的:

  • SQLAlchemy:对于构建好的Query对象,你可以直接转成字符串看基础SQL,或者用compile()方法生成带实际参数的完整SQL(和Django的query属性效果一致):
from sqlalchemy import select
from your_models import User

# 构建查询
query = select(User.id, User.phone).where(User.name == '123')

# 方式1:打印基础SQL(不带参数)
print(str(query))

# 方式2:生成带实际参数的完整SQL
compiled_sql = query.statement.compile(
    bind=your_db_engine,
    compile_kwargs={"literal_binds": True}
)
print(compiled_sql)

literal_binds=True会把参数直接替换到SQL语句里,调试时看特别直观。

  • Peewee:用sql()方法就能拿到SQL字符串和参数元组,再手动拼接也很方便:
from your_models import User

query = User.select(User.id, User.phone).where(User.name == '123')
sql_str, params = query.sql()
print(f"SQL: {sql_str},参数: {params}")
# 调试用:替换参数得到最终SQL
final_sql = sql_str % params
print(f"最终执行SQL: {final_sql}")
二、全局记录:开启ORM的日志功能

如果想自动记录所有执行的SQL(包括insert、update、delete这些写操作),开启ORM的日志是最省心的方案:

  • SQLAlchemy:配置Python的logging模块,把sqlalchemy.engine的日志级别设为INFO或DEBUG,就能自动输出所有执行的SQL细节:
import logging

# 基础日志配置
logging.basicConfig(level=logging.INFO)
# 开启SQLAlchemy的SQL日志
logging.getLogger('sqlalchemy.engine').setLevel(logging.INFO)

这样每次数据库操作,控制台或日志文件里都会出现完整的SQL语句和参数。

  • Peewee:直接修改自带的logger级别即可:
import logging
from peewee import logger

logger.setLevel(logging.DEBUG)

如果需要把日志写到文件,自己加个FileHandler就行。

三、自定义ORM/封装查询:自己加日志逻辑

如果你是自己封装的数据库操作,那可以在执行SQL的核心函数里加一层日志记录:

def execute_db(sql, params=None):
    params = params or ()
    # 记录原始SQL和参数(生产环境推荐这个,避免SQL注入风险)
    print(f"[DB] 执行SQL: {sql},参数: {params}")
    
    # 调试用:生成带参数的最终SQL(仅用于本地调试,生产别用!)
    debug_sql = sql % params
    print(f"[DB Debug] 最终SQL: {debug_sql}")
    
    # 实际执行数据库操作
    with your_db_connection.cursor() as cursor:
        cursor.execute(sql, params)
        return cursor.fetchall()

这里要注意:直接替换参数生成SQL只适合调试,生产环境绝对不能这么做,防止SQL注入风险,只记录原始SQL和参数就够了。

如果你用的是其他特定ORM没提到,比如Tortoise-ORM之类的,可以告诉我具体库,我再给你针对性的方法!

内容的提问来源于stack exchange,提问作者张豪飞

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 08:44:47