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

sqlalchemy: How to bind a list of parameters to a literal string?

虽然我在我的大部分应用程序中都使用了适当的 ORM 映射器,但仍有一些实现起来非常复杂。这就是为什么我尝试使用 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) Error binding parameter 2 - probably unsupported type.

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

所以 sqlalchemy 似乎不知道如何处理参数中的列表类型,但我怀疑您列出的错误来自另一个基于参数 2 的示例。

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

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 映射器的使用。希望这些选项之一有所帮助!