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

标签 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作为Composed对象转换为sql查询字符串?

SELECT * FROM topic

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

query.as_string(conn)

有什么提示吗?非常感谢

最佳答案

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

关于python - 如何在不创建 conn.cursor() 的情况下检查/打印 psycopg2 动态查询 Compose,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51312789/

相关文章:

python - Django 部署 https + gunicorn 和 nginx

python - 如何在python中生成文件而不将其保存到磁盘?

python - IIS 7.5 上的 Mercurial 和 hgweb - python 错误

postgresql - 如何测量 Postgres 索引占用的磁盘空间?

function - JDBC Postgres 存储函数调用返回 setof 'myType'

json - 将 JSON 字符串插入 Postgres 并返回字段

python - 如果 pytest 是从另一个模块以编程方式运行的,如何将参数传递给 pytest?

django - 测试 protected View - 处理 PermissionDenied 响应

python - Pandas:在整个列中分配一个数字,直到结束

python - 是否有使 Pytest 重新启动的命令?