当我尝试执行这个简单的请求时,我遇到了一个问题:
params['_filter_items'] = (12345)
sql = """ SELECT * FROM items
WHERE items.items IN %(_filter_items)s"""
# session is a db session of sqlAlchemy
query = session.execute(sql % params)
它将生成:
SELECT * FROM items
WHERE items.items IN 12345
没有() 当我有多个项目时,没关系; 我可以触摸请求;但我想知道是否还有其他方法可以解决它。
答案 0 :(得分:2)
此对象
(12345)
与
相同12345
但看起来你需要tuple
单个元素12345
,可以用逗号
(12345,)
我们应该避免自己插入参数:
session.execute(sql % params)
让我们将这项工作委托给SQLAlchemy
&数据库驱动程序并将参数作为参数传递给execute
:
session.execute(sql, params)
试
params['_filter_items'] = (12345,)
sql = """ SELECT * FROM items
WHERE items.items IN %(_filter_items)s"""
# session is a db session of sqlAlchemy
query = session.execute(sql, params)
答案 1 :(得分:0)
代码行params['_filter_items'] = (12345)
由Python解释器解析为params['_filter_items'] = 12345
。这意味着在您的代码(12345)
中,它是int
,而不是tuple
。要使用元组,您必须编写params['_filter_items'] = (12345, )
。
答案 2 :(得分:0)
您应该查看此SQLAlchemy in clause以获得更安全的方法。