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查詢並將一個列表作爲參數傳遞。 –