0
我试图将列表绑定到sqlalchemy中的原始SQL查询中的参数。 This post建议与psycopg2
这样做的好方法如下。用pyodbc SQLAlchemy SQL参数列表替换
some_ids = [1, 2, 3, 4]
query = "SELECT * FROM my_table WHERE id = ANY(:ids);"
engine.execute(sqlalchemy.sql.text(query), ids=some_ids)
然而,这似乎并不为我的SQL Server
与pyodbc
的环境中工作。只有一个"?"
被添加的,而不是4
sqlalchemy.exc.ProgrammingError: (pyodbc.ProgrammingError)
('Invalid parameter type. param-index=0 param-type=tuple', 'HY105')
[SQL: 'SELECT * FROM my_table WHERE id = ANY(?);'] [parameters: ((1, 2, 3, 4),)]
有什么办法,使这项工作?如果可能的话,我想避免manually creating placeholders。
SQLAlchemy的版本= 1.0.13,pyodbc版本4.0.16 =
是的,这似乎也适用于我。但上面的原始SQL查询不起作用。任何想法为什么? –
您可以使用['some_ids = [bindparam('id_1'),bindparam('id_2')]'](http://docs.sqlalchemy.org/en/latest/core/sqlelement.html#sqlalchemy.sql。如果想使用'executemany()',则可以显式控制参数名称。在你的例子中,你甚至不需要将手工形成的'params'传递给'execute()',因为它们已经绑定在你的语句中。 –
嗯我明白了。我想这是一种方法。但如果可能的话,我想编写一个原始的SQL查询并将一个列表作为参数传递。 –