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 以获得更安全的执行此操作的方法。