我正在使用 python + microsoft 的pwrtest 实用程序运行一些休眠测试
另外我正在使用sqlalchemy (orm) 来处理数据库 (ms sql server 2008 r2)。
我已连接到远程 sql 服务器,一切正常,但是在计算机进入休眠模式 (S4) 后,sql 服务器断开连接(我将其视为管理工作室的“活动监视器”)。
当我的电脑恢复休眠并继续执行脚本时,我收到错误“ DBAPIError: (Error) ('08S01', '[08S01] [Microsoft][ODBC SQL Server Driver]Communication link failure (0) (SQLExecDirectW)' ) "
我试过使用pool_recycle
engine = create_engine(settings.sql_engine, echo=True, pool_recycle=1)
但是,据我了解sqlalchemy
并没有意识到连接不再存在。
我也尝试过使用engine.dispose()
,根据文档,它应该删除当前池:
处置此 Engine 使用的连接池。
在旧的连接池被释放后,会立即创建一个新的连接池。这个新池与所有 SQLAlchemy 连接池一样,在第一次请求之前不会与数据库建立任何实际连接。
但这也没有用
如何重新连接到数据库?
谢谢!
编码:
#module db.py:
from sqlalchemy.ext.declarative import declarative_base , declared_attr
from sqlalchemy import *
from sqlalchemy.orm import sessionmaker, relationship, backref
from sqlalchemy.orm.exc import *
Base = declarative_base()
class Drive(Base):
__tablename__ = "drives"
id = Column(Integer, primary_key=True)
isPhysical = Column(Boolean)
devicePath = Column(String(100))
name = Column(String(10))
encrypted = Column(Boolean, default=False)
size = Column(BigInteger)
def __init__(self):
pass
sql_engine = 'mssql+pyodbc://Tester:Password@sql-server/Automation'
engine = create_engine(sql_engine, echo=True)
Session = sessionmaker(bind=engine)
Base.metadata.create_all(engine)
实际调用:
#hibernation.py
from db import *
import subprocess
command = r"pwrtest /sleep /s:4 /h:n /c:1"
out = subprocess.check_output(command)
# hibernation occurs
session = Session()
session.query(Drive).all()