我正在尝试创建如下声明:
SELECT * FROM table WHERE provider IN ('provider1', 'provider2', ...)
但是,我在 Django API 的字符串格式化方面遇到了一些问题。这是我到目前为止所拥有的:
profile = request.user.get_profile()
providers = profile.provider.values_list('provider', flat=True) # [u'provider1', u'provider2']
providers = tuple[str(item) for item in providers] # ('provider1', 'provider2')
SQL = "SELECT * FROM table WHERE provider IN %s"
args = (providers,)
cursor.execute(sql,args)
DatabaseError
(1241, 'Operand should contain 1 column(s)')
MySQLdb 有一个方法可以帮助解决这个问题:
Doc
字符串字面量(...)
string_literal(obj) -- 将对象 obj 转换为 SQL 字符串文字。
这意味着,任何特殊 SQL 字符都会被转义,并且会被括起来
在单引号内。换句话说,它执行:
"'%s'" % escape_string(str(obj))
Use connection.string_literal(obj), if you use it at all.
_mysql.string_literal(obj) cannot handle character sets.
Usage
# connection: <_mysql.connection open to 'localhost' at 1008b2420>
str_value = connection.string_literal(tuple(provider))
# '(\'provider1\', \'provider2\')'
SQL = "SELECT * FROM table WHERE provider IN %s"
args = (str_value,)
cursor.execute(sql,args)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)