打印编译的 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:打印实际查询

flask-sqlalchemy的使用

flask_sqlalchemy

如何在与 SQLAlchemy 和 psycopg2 的 PostgreSQL 连接上设置“lock_timeout”?

SQlAlchemy的增删改查

在 SQLAlchemy 中以特定格式按日期分组