psycopg - 获取格式化的sql而不是执行

时间:2011-07-21 11:47:25

标签: python postgresql psycopg

我有一段Python代码,它通过psycopg与PostgreSQL数据库交互。

所有文献都警告不要自己进行sql格式化,并建议让驱动程序执行此操作。 E.g:

cur.execute('select name, age from people where name = %s;', ('ann',) )

然后驱动程序格式化sql字符串。假设我不想执行任何操作,但我只想要完全格式化的sql字符串。是否有任何功能可以在psycopg模块中获取这个格式化的SQL?

2 个答案:

答案 0 :(得分:18)

你会使用函数curs.mogrify():

SQLstring = curs.mogrify('select name, age from people where name = %s;', ('ann',) )

答案 1 :(得分:1)

编辑:看起来以下内容不太正确,psycopg 使用PQexecParams,但计划(请参阅下面的评论)。留下答案,因为它是一个有用的抽象,对于大多数参数化查询都是如此,显然不是psycopg2。


实际上,驱动程序不会格式化字符串。你在那里使用的是一个参数化查询:sql字符串和参数“发送”到postgres完全按照你的指定发送,postgres解析模板字符串,然后将参数插入到解析树中。这样,参数永远不必编码解码,因此任何编码错误,故障或注入攻击都没有机会。 OTOH,这意味着在代码中没有任何地方存在您正在寻找的格式化例程。

有关更多详细信息,请参阅libpq文档中的“PQexecParams”方法 - libpq是Postgres的C级客户端接口库。