如何在不创建 conn.cursor() 的情况下检查/打印 psycopg2 动态查询 Compose

Sui*_*nny 4 python postgresql psycopg2 pytest

我正在为查询生成器编写单元测试,其中我从几个用户输入字段组装查询。

例如

 query = sql.SQL("SELECT {fields} FROM {table}).format(
                                fields='*'
                                table=sql.Identifier(topic)))
Run Code Online (Sandbox Code Playgroud)

我只是想检查查询是否是我想要的,不需要执行。

我试图打印查询,并得到一个如下所示的组合对象

Composed([SQL('SELECT '), Composed([Identifier('*')]), SQL(' FROM '), Identifier('topic'), SQL(' '), SQL(''), SQL(' ')...)
Run Code Online (Sandbox Code Playgroud)

是否尝试将动态 sql 作为组合对象转换为 sql 查询字符串?

SELECT * FROM topic
Run Code Online (Sandbox Code Playgroud)

我没有为单元测试设置 postgres,所以我无法使用

query.as_string(conn)
Run Code Online (Sandbox Code Playgroud)

有什么提示吗?非常感谢

phd*_*phd 6

您需要cursor.mogrify(query, params),但要调用它,您需要一个游标,要创建游标,您需要打开一个连接。我不相信你可以在没有连接的情况下得到最终的查询;这是因为查询取决于服务器和数据库(服务器版本、数据库编码、引用样式)。

  • 谢谢!...最终决定使用 docker 启动本地 postgres 服务器。 (2认同)