打印编译的 sqlalchemy 查询
Posted
技术标签:
【中文标题】打印编译的 sqlalchemy 查询【英文标题】:Print compiled sqlalchemy query 【发布时间】:2020-06-30 09:12:04 【问题描述】:有没有办法打印由 sqlalchemy 创建的查询
emp = session.query(Employee).filter(*empfilters).order_by(Employee.Name).all()
我尝试过使用 SO 的 str(emp)
、emp.statement.compile(dialect=postgresql.dialect(), compile_kwargs="literal_binds": True)
或其他解决方案,但无法重现任何内容。
这里的*empfilters
再次来自其他表(一对多连接的一部分),所以我想检查它究竟被编译成什么。
如果我尝试按照上面的方法进行操作,错误是 - 'list' object has no attribute 'statement'
【问题讨论】:
查询结束于order_by(Employee.Name)
。当您最后使用 .all()
时,查询运行并返回一个列表,因此您的错误消息。如果您删除 .all()
,您应该能够检查查询字符串。
global name 'postgresql' is not defined
-- 需要添加@ac24吗?
只需str(emp)
就可以让您在本机 sql 中查看查询。如果您还有其他问题,请包含更多代码来演示 empfilters
等。
谢谢。我可以通过删除 all()
然后执行 print emp
来打印它
【参考方案1】:
根据@ac24 的建议,从查询中删除了.all()
,然后print emp
成功了。
【讨论】:
以上是关于打印编译的 sqlalchemy 查询的主要内容,如果未能解决你的问题,请参考以下文章
如何在与 SQLAlchemy 和 psycopg2 的 PostgreSQL 连接上设置“lock_timeout”?