虽然我在大多数应用程序中使用了正确的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的错误 - 可能是不支持的类型。
那我怎样才能做到这一点?
答案 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的使用。希望其中一个选项有所帮助!