Это, похоже, ошибка в методе is_disconnect () для pymssql, где он игнорирует ошибки TCP-соединения и тайм-аута, оставляя курсор в несчастном состоянии; см. http://www.sqlalchemy.org/trac/ticket/2172. На данный момент вы можете сделать обезьян-патч как:
from sqlalchemy.dialects.mssql import pymssql
def is_disconnect(self, e):
for msg in (
"20003",
"20004",
"Error 10054",
"Not connected to any MS SQL server",
"Connection is closed"
):
if msg in str(e):
return True
else:
return False
pymssql.MSDialect_pymssql.is_disconnect = is_disconnect