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

如何打印Python调用数据库的查询语句及指定代码行的查询到终端?

打印Python数据库查询语句的方法

针对你的Django ORM代码场景

你的代码中user.get_notifications()返回的是Django QuerySet对象,要打印对应的SQL查询语句,有几种实用方法:

  • 直接转换QuerySet为字符串:QuerySet在未执行数据库查询前(比如切片操作前),转成字符串就能得到对应的SQL语句:

    # 先获取完整QuerySet
    queryset = user.get_notifications(max_id=max_id, types=types).order_by('-created')
    # 打印SQL到终端
    print(str(queryset))
    # 再执行切片获取结果
    notifications = queryset[:count]
    
  • 访问QuerySet的query属性:直接调用query属性也能输出SQL语句:

    queryset = user.get_notifications(max_id=max_id, types=types).order_by('-created')
    print(queryset.query)
    notifications = queryset[:count]
    
  • 打印包含切片的最终查询:如果要查看带LIMIT(对应代码里的[:count])的完整SQL,直接对切片后的QuerySet转字符串即可:

    notifications_query = user.get_notifications(max_id=max_id, types=types).order_by('-created')[:count]
    print(str(notifications_query))
    

    注:Django QuerySet是延迟执行的,转字符串操作会直接生成SQL,不会触发实际数据库查询。

其他ORM/原生数据库场景

如果使用其他工具,方法类似:

  • SQLAlchemy:将Query对象转成字符串str(query),或通过query.statement获取SQL语句对象后转字符串。
  • 原生DBAPI:执行前直接打印SQL模板和参数:
    sql = "SELECT * FROM notifications WHERE user_id = %s AND max_id <= %s ORDER BY created DESC LIMIT %s"
    params = (user.id, max_id, count)
    print(f"执行SQL: {sql},参数: {params}")
    cursor.execute(sql, params)
    

内容的提问来源于stack exchange,提问作者Frank Castle

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 05:54:22