как переподключиться к MS SQL после гибернации (S4)(или разорвано соединение )?

Я запускаю несколько тестов гибернации, используя утилиту python + microsoft pwrtest

. Также я использую sqlalchemy(форма )для работы с базой данных (ms sql server 2008 r2 ).

Я подключен к удаленному серверу sql, и все работает нормально, однако после перехода компьютера в режим гибернации (S4 )сервер sql разрывает соединение (Я вижу его как «монитор активности» в студии управления ).

Когда мой компьютер возвращается в спящий режим и продолжает выполнение сценария, я получаю сообщение об ошибке «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(), и согласно документации он должен удалить текущий пул :

Dispose of the connection pool used by this Engine.

A new connection pool is created immediately after the old one has been disposed. This new pool, like all SQLAlchemy connection pools, does not make any actual connections to the database until one is first requested.

. Но и это не сработало

Как повторно подключиться к базе данных?

Спасибо!

Код:

#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()

6
задан Alex Okrushko 15 August 2012 в 17:12
поделиться