Python SQLAlchemy更新操作在列表处于“0”状态时不起作用;在;运营商是巨大的
我试图更改列表“list_var”中ID所在行的值 当list_var的长度很小时,上面的代码工作得很好,但当长度很大时,它会给出以下错误Python SQLAlchemy更新操作在列表处于“0”状态时不起作用;在;运营商是巨大的,python,sql,sql-server,python-3.x,sqlalchemy,Python,Sql,Sql Server,Python 3.x,Sqlalchemy,我试图更改列表“list_var”中ID所在行的值 当list_var的长度很小时,上面的代码工作得很好,但当长度很大时,它会给出以下错误 DBAPIError: (pyodbc.Error) ('07002', '[07002] [Microsoft][SQL Server Native Client 11.0]COUNT field incorrect or syntax error (0) (SQLExecDirectW)') 有什么解决办法吗?当我将列表拆分为较小的列表时,它起了作用。
DBAPIError: (pyodbc.Error) ('07002', '[07002] [Microsoft][SQL Server Native Client 11.0]COUNT field incorrect or syntax error (0) (SQLExecDirectW)')
有什么解决办法吗?当我将列表拆分为较小的列表时,它起了作用。 下面是代码
if(len(list_var)>1000):
chunks = [list_var[x:x+1000] for x in range(0, len(list_var), 1000)]
for chunk in chunks:
query = sqlalchemy.update(Table_var).values(column_var=2).where(Table_var.columns.ID.in_(chunk))
res = conn.execute(query)
如果我没记错的话,mssql将占位符的数量限制为数千个,这是由于实现细节(可能与SP参数计数有关,即2100)。创建并使用一个临时表或TVP(大多数Python驱动程序都不太支持)。既然您要求解决任何问题:将list_var一分为二,并分别执行这两个部分?
if(len(list_var)>1000):
chunks = [list_var[x:x+1000] for x in range(0, len(list_var), 1000)]
for chunk in chunks:
query = sqlalchemy.update(Table_var).values(column_var=2).where(Table_var.columns.ID.in_(chunk))
res = conn.execute(query)