biegnę kilka testów hibernacji przy użyciu Pythona + Microsoftu pwrtest utilityjak ponownie połączyć się z MS SQL po hibernacji (S4) (lub porzuconym połączeniu)?
Również używam sqlalchemy (ORM) do pracy z (MS SQL Server 2008 R2) bazy danych.
Jestem podłączony do zdalnego serwera sql i wszystko działa grzywny, jednak po przejściu komputera do trybu hibernacji (S4) serwer sql odrzuca połączenie (widzę go jako "Monitor aktywności" w studio zarządzania).
Kiedy mój komputer wraca do hibernacji i kontynuuje pracę ze skryptem, pojawia się błąd "DBAPIError: (Błąd) (" 08S01 "," [08S01] [Microsoft] [Sterownik ODBC SQL Server] Błąd łącza komunikacyjnego (0) (SQLExecDirectW) ') "
próbowałem użyć pool_recycle
engine = create_engine(settings.sql_engine, echo=True, pool_recycle=1)
Jednakże, o ile mi zrozumieć sqlalchemy
nie zdaje sobie sprawy, że połączenie już nie istnieje.
Ja również próbował użyć engine.dispose()
i zgodnie z documentation powinno spaść aktualny basenu:
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.
ale to też nie działa
Jak podłączyć do bazy danych?
Dzięki!
Kod:
#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:[email protected]/Automation'
engine = create_engine(sql_engine, echo=True)
Session = sessionmaker(bind=engine)
Base.metadata.create_all(engine)
rzeczywiste wezwanie:
#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()
dzięki. I rzeczywiście dodawanie słuchacza działało, jednak stawia dodatkowe zapytania dla wszystkich zatwierdzeń. Potrzebuję jednorazowej rzeczy, aby przywrócić połączenie po określonej sytuacji. Do tej pory nie znalazłem nic lepszego niż ponowne wywoływanie 'create_engine' i' sessionmaker' na nowym silniku :( –
Zastanawiam się, czy istnieje sposób wywołania czegoś takiego jak 'raise exc.DisconnectionError()', więc silnik ponownie łączy się samodzielnie –
Alex, znalazłeś dobre rozwiązanie? Mam ten sam problem z jedną z naszych konfiguracji, gdzie podejrzewamy problemy z siecią –