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

时间:2018-07-12 19:04:06

标签: python postgresql pytest psycopg2

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

例如

 query = sql.SQL("SELECT {fields} FROM {table}).format(
                                fields='*'
                                table=sql.Identifier(topic)))

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

我试图打印查询,并得到了一个看起来像

的组合对象
Composed([SQL('SELECT '), Composed([Identifier('*')]), SQL(' FROM '), Identifier('topic'), SQL(' '), SQL(''), SQL(' ')...)

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

SELECT * FROM topic

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

query.as_string(conn)

有任何提示吗?非常感谢

1 个答案:

答案 0 :(得分:1)

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