使用sqlalchemy批量删除问题

时间:2017-12-11 01:08:01

标签: python sql-server python-3.x sqlalchemy azure-sql-database

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

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

我觉得这一定是一个常见的问题,必须有一个更好的方法来做到这一点,可能是通过使用分块方法延迟后续的执行语句或者完全使用不同的方法。我对sqlalchemy很新。任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:2)

我似乎通过循环遍历分块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条记录方面会遇到麻烦。桌子不大。