session.execute() SQLAlchemy 的 IN 运算符
session.execute() IN operator of SQLAlchemy
当我尝试执行那个简单的请求时遇到一个问题:
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
无()
当我有不止一件时没关系;
我可以触摸请求;但我想知道是否有其他方法可以解决它。
代码行 params['_filter_items'] = (12345)
由 Python 解释器解析为 params['_filter_items'] = 12345
。这意味着在您的代码 (12345)
中它是 int
,而不是 tuple
。要使用元组,您必须编写 params['_filter_items'] = (12345, )
.
这个对象
(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)
您应该查看此 SQLAlchemy in clause 以获得更安全的执行此操作的方法。
当我尝试执行那个简单的请求时遇到一个问题:
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
无() 当我有不止一件时没关系; 我可以触摸请求;但我想知道是否有其他方法可以解决它。
代码行 params['_filter_items'] = (12345)
由 Python 解释器解析为 params['_filter_items'] = 12345
。这意味着在您的代码 (12345)
中它是 int
,而不是 tuple
。要使用元组,您必须编写 params['_filter_items'] = (12345, )
.
这个对象
(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)
您应该查看此 SQLAlchemy in clause 以获得更安全的执行此操作的方法。