使用SQLalchemy批量删除问题



我正在尝试使用以下代码从ID列表中的Microsoft Azure中的SQL Server 2016 DB删除大量记录(最多10,000)。

del_bool = Users.columns.ID.in_(idlist)
stmt_delete = Users.delete().where(del_bool)
results_proxy = connection.execute(stmt_delete)

当我有少数IDS<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

我觉得这一定是一个常见的问题,必须有一种更好的方法来做到这一点,也许是通过用块方法延迟后续执行语句或完全使用其他方法来做到这一点。我是Sqlalchemy的新手。任何帮助将不胜感激。

我似乎已经通过循环浏览块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在删除10,000个记录时会遇到麻烦。表不大。

最新更新