如何打印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
相关产品推荐
相关产品推荐

