6

Python+Microsoftのpwrtestユーティリティを使用していくつかの休止状態テストを実行しています

また、データベース(ms sql server 2008 r2)を操作するためにsqlalchemy(orm)を使用しています。

リモートSQLサーバーに接続していて、すべて正常に動作しますが、コンピューターが休止状態(S4)に入ると、SQLサーバーは接続を切断します(管理スタジオでは「アクティビティモニター」と表示されます)。

PCが休止状態に戻り、スクリプトを続行すると、エラー「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()によると、現在のプールを削除する必要があります。

このエンジンで使用されている接続プールを破棄します。

古い接続プールが破棄された直後に、新しい接続プールが作成されます。この新しいプールは、すべての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()
4

1 に答える 1

3

この「悲観的な切断処理」を試すことができます。

http://docs.sqlalchemy.org/en/rel_0_7/core/pooling.html#disconnect-handling-pessimistic

于 2012-08-15T19:54:18.880 に答える