如何在Python中手动转义SQL文字

时间:2014-04-21 01:46:39

标签: python sql postgresql psycopg2

我正在尝试编写一个特定于我的应用程序的高级查询构建器。我目前正在使用psycopg2,它似乎没有办法逃脱一个文字而不是一个较大的,已经写好的查询的一部分。

这是否有通用模块?我似乎没有很多(如果有的话)选择。

1 个答案:

答案 0 :(得分:2)

你不应该 来逃避文字;这是参数化语句的用途。 psycopg2支持plannable语句(insert / update / delete / select)和non-plannable语句(create table,create index,...)。

你应该始终使用参数化语句而不是直接将文字替换为查询字符串。

It looks like psycopg2 exposes some quoting functions too - 特别是psycopg2.extensions.adapt

那就是说,对于现代的PostgreSQL来说,它非常微不足道;您可以使用与标识符相同的规则,只需使用'代替"

  • 如果字符串中有一个零字节(\x00),则在零字节之前截断字符串;
  • 对于字符串中的每个',请将其替换为'';和
  • 预先添加'

那就是它。反斜杠没有特殊含义,所以没有别的东西可以逃脱。

您只需要确保standard_conforming_strings已启用(SELECT current_setting('standard_conforming_strings')并抛出异常(如果不是),因为这些规则对于旧式字符串而言是完全错误的{{1 }}。字符串。

E''中拥有escape_literalescape_identifier功能非常好。考虑提交补丁。

另见: