如何在休眠(S4)(或断开连接)后重新连接MS SQL?

时间:2012-08-15 16:33:58

标签: python sqlalchemy database-connection

我正在使用python + microsoft的pwrtest utility

运行一些休眠测试

我也使用 sqlalchemy (orm)来处理数据库(ms sql server 2008 r2)。

我已连接到远程sql服务器并且所有内容都有罚款,但是在计算机进入休眠模式(S4)后,sql server会断开连接(我将其视为管理工作室的“活动监视器”)。

当我的电脑恢复休眠并继续使用脚本时,我收到错误“ DBAPIError :(错误)('08S01','[08S01] [Microsoft] [ODBC SQL Server驱动程序]通信链接失败( 0)(SQLExecDirectW)')

我尝试使用pool_recycle

engine = create_engine(settings.sql_engine, echo=True, pool_recycle=1)

但是,据我所知sqlalchemy没有意识到连接不再存在。

我还尝试使用engine.dispose(),根据documentation,它应该删除当前的游戏池:

  

处理此引擎使用的连接池。

     

旧连接池在旧连接池创建后立即创建   被处置了像所有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()

1 个答案:

答案 0 :(得分:3)