Python中peewee ORM如何输出生成的SQL命令?

英文比较菜,文档里面找不到。求帮助。 可以输出最终 sql 语句,方便检查 orm 是否正确。


Python中peewee ORM如何输出生成的SQL命令?
3 回复

在peewee里看生成的SQL,直接用Model._meta.databaselast_executed_query就行,但更稳的是用sql()方法或者开日志。

最直接的就是用sql(),比如:

query = User.select().where(User.active == True)
print(query.sql())

这会返回一个元组,第一个元素就是带占位符的SQL字符串。

如果你要执行前看完整的SQL(包括参数),可以这么干:

from peewee import Model, CharField, SqliteDatabase

db = SqliteDatabase(':memory:')

class User(Model):
    username = CharField()
    class Meta:
        database = db

db.connect()
db.create_tables([User])

# 方法1:用sql()看带占位符的SQL
query = User.select().where(User.username == 'test')
sql_with_placeholders, params = query.sql()
print("SQL with placeholders:", sql_with_placeholders)
print("Parameters:", params)

# 方法2:直接打印Query对象(某些peewee版本支持)
print("Query object:", query)

# 方法3:配置数据库日志(最实用)
import logging
logger = logging.getLogger('peewee')
logger.addHandler(logging.StreamHandler())
logger.setLevel(logging.DEBUG)

# 现在执行查询就会自动打印SQL
user = User.get_or_none(User.username == 'test')

开日志那个方法最省事,一劳永逸。

总结:用sql()方法或者开peewee日志。


自己回,
import logging
logger = logging.getLogger(‘peewee’)
logger.setLevel(logging.DEBUG)
logger.addHandler(logging.StreamHandler())
是这个吗?

是的,取一个叫 peewee 的 logger

回到顶部