session.execute()SQLAlchemy的IN运算符

时间:2017-06-09 09:23:34

标签: python sqlalchemy pyramid

当我尝试执行这个简单的请求时,我遇到了一个问题:

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

没有() 当我有多个项目时,没关系; 我可以触摸请求;但我想知道是否还有其他方法可以解决它。

3 个答案:

答案 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以获得更安全的方法。