2012-08-15 13 views
6

Ben veritabanı (MS SQL Server 2008 R2) ile çalışmak için piton + microsoft'un pwrtest utilityHazırda bekletme (S4) (veya bağlantı kesildi) sonra MS SQL ile yeniden nasıl?

Ayrıca kullanıyorum sqlalchemy (ORM) kullanarak bazı hazırda bekleme testleri çalıştırıyorum.

Uzak sql sunucusuna bağlandım ve her şey para cezalarıyla çalışıyor, ancak bilgisayar hazırda bekleme moduna (S4) geçtikten sonra sql sunucusu bağlantıyı kapatıyor (yönetim stüdyosunda "Activity monitor" olarak görüyorum).

benim pc kış uykusu için geri alır ve ben hata " DBAPIError olsun komut dosyası ile devam

: (Hata) ('08S01', '[08S01] [Microsoft] [ODBC SQL Server sürücüsü] İletişim bağlantısı hatası (0) (SQLExecDirectW) ') "

Ben bildiğim kadarıyla bağlantı artık yok olduğunu fark edemiyor sqlalchemy anladığımız kadarıyla, Ancak pool_recycle

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

kullanmayı denedik. Nasıl Veritabanı yeniden bağlanmayı o da

işe yaramadı

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.

Ama:

Ben de engine.dispose() kullanmaya çalıştı ve geçerli havuzu damla gerekir documentation göre ettik?

Teşekkürler!

kodu:

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

fiili çağrı:

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

cevap

3
+0

teşekkürler. Ve gerçekten de dinleyici işe yaradı, ancak tüm taahhütler için fazladan sorgular getiriyor. İhtiyacım olan şey, belirli bir durumdan sonra bağlantıyı yeniden kurmak için tek seferlik bir şey. Şimdiye kadar yeni motorda 'create_engine' ve 'sessionmaker' kelimelerini tekrar aramaktan daha iyi bir şey bulamadım :( –

+0

'exc.isconnectionError() 'gibi bir şeyi tetiklemek için bir yol olup olmadığını merak ediyorum, yani motor –

+0

Alex, iyi bir çözüm buldunuz mu? Ağ sorunlarından şüphelendiğimiz kurulumlarımızdan biriyle aynı sorunu yaşıyorum: –

İlgili konular