sqlalchemy:如何将参数列表绑定到文字字符串?

时间:2015-02-24 15:20:29

标签: sqlalchemy

虽然我在大多数应用程序中使用了正确的ORM-mappers,但实现起来却有一些非常复杂。这就是我尝试使用Literal-SQL的原因。

现在我想将一个值列表作为参数传递给该查询。

问题的简化示例如下:

ids = [1, 2, 3]
session.query('name') \
  .from_statement('SELECT name FROM users WHERE id IN(:ids)') \
  .params(ids=ids).all()

由于错误,这不起作用:

  

sqlalchemy.exc.InterfaceError:(InterfaceError)绑定参数2的错误 - 可能是不支持的类型。

那我怎样才能做到这一点?

1 个答案:

答案 0 :(得分:1)

所以似乎sqlalchemy不知道如何处理params中的列表类型,尽管我怀疑你列出的错误来自另一个基于参数2的例子是问题。

Here是一个解决您列出的错误的链接。对于列表问题,您可以尝试类似:

def makeSQLList(myList):
    if not myList:
        return "()"
    newString = "(" + str(myList[0])
    for i in range(1,len(myList)):
        newString += "," + str(myList[i])
    newString += ")"
    return newString

ids = [1, 2, 3]
session.query('name') \
  .from_statement(text('SELECT name FROM users WHERE id IN ' + makeSQLList(ids))) \
  .all()

或者您可以扩展sqlalchemy以接受您遇到问题的任何类型。或者,尝试发布您的复杂查询,也许社区可以帮助简化ORM-mappers的使用。希望其中一个选项有所帮助!