【发布时间】:2010-09-23 12:32:07
【问题描述】:
出于某些原因,我想对字符串值进行显式引用(成为构造 SQL 查询的一部分),而不是等待 cursor.execute 方法对其第二个参数的内容执行隐式引用。
“隐式引用”是指:
value = "Unsafe string"
query = "SELECT * FROM some_table WHERE some_char_field = %s;"
cursor.execute( query, (value,) ) # value will be correctly quoted
我更喜欢这样的:
value = "Unsafe string"
query = "SELECT * FROM some_table WHERE some_char_field = %s;" % \
READY_TO_USE_QUOTING_FUNCTION(value)
cursor.execute( query ) # value will be correctly quoted, too
Python DB API 规范是否期望如此低级别的READY_TO_USE_QUOTING_FUNCTION(我在PEP 249 文档中找不到这样的功能)。如果没有,也许 Psycopg2 提供了这样的功能?如果没有,也许 Django 提供了这样的功能?我不想自己写这样的函数......
【问题讨论】:
-
我建议你看看 SQLAlchemy 的 SQL builder API,即使你对 ORM 组件不感兴趣;这将让您在绑定值的同时仍保持灵活性。
-
类似
db_cur.execute('''UPDATE test_table SET field_1="%s" WHERE field_2="%s"''' % (data, condition))的东西注意%s周围的三个单引号和双引号 -
'''' 允许避免将整个 sql 保留在一行中
标签: python sql django psycopg2