Python 使用sqlalchemy批量删除问题
我正在尝试使用以下代码,根据ID列表,从Microsoft Azure中的SQL Server 2016 DB中删除大量记录(最多10000条)Python 使用sqlalchemy批量删除问题,python,sql-server,python-3.x,sqlalchemy,azure-sql-database,Python,Sql Server,Python 3.x,Sqlalchemy,Azure Sql Database,我正在尝试使用以下代码,根据ID列表,从Microsoft Azure中的SQL Server 2016 DB中删除大量记录(最多10000条) del_bool = Users.columns.ID.in_(idlist) stmt_delete = Users.delete().where(del_bool) results_proxy = connection.execute(stmt_delete) 当我有少量的ID
del_bool = Users.columns.ID.in_(idlist)
stmt_delete = Users.delete().where(del_bool)
results_proxy = connection.execute(stmt_delete)
当我有少量的ID<2000时,这可以正常工作,但当它超过4000时,我会得到以下错误:
sqlalchemy.exc.DBAPIError: (pyodbc.Error) ('07002', '[07002] [Microsoft][ODBC Driver 13 for SQL Server]COUNT field incorrect or syntax error (0) (SQLExecDirectW)')
我尝试将ID列表分为2000个块,但在尝试删除第二个块时出现以下错误
sqlalchemy.exc.DBAPIError: (pyodbc.Error) ('HY000', '[HY000] [Microsoft][ODBC Driver 13 for SQL Server]Connection is busy with results for another command
我觉得这一定是一个常见的问题,必须有更好的方法来做到这一点,可能是使用chunking方法延迟后续的execute语句,或者完全使用不同的方法。我对炼金术很陌生。任何帮助都将不胜感激。我似乎已经通过循环使用分块ID列表并使用无连接执行解决了这个问题
for del_chunk in delete_chunks:
del_bool = Users.columns.ID.in_(del_chunk)
stmt_delete = Users.delete().where(del_bool)
results_proxy = engine.execute(stmt_delete)
令人惊讶的是,Microsoft Azure在删除10000条记录时会遇到问题。这个表不大。我似乎已经解决了这个问题,通过循环使用分块ID列表并使用无连接执行
for del_chunk in delete_chunks:
del_bool = Users.columns.ID.in_(del_chunk)
stmt_delete = Users.delete().where(del_bool)
results_proxy = engine.execute(stmt_delete)
令人惊讶的是,Microsoft Azure在删除10000条记录时会遇到问题。这张桌子不大