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 映射器的使用。希望这些选项之一有所帮助!
虽然我在我的大部分应用程序中都使用了适当的 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 映射器的使用。希望这些选项之一有所帮助!