2010-08-18 5 views
5

Ich bin neu in SQLAlchemy, aber ich versuche es zu verwenden, um eine Datenbank für ein persönliches Projekt zu erstellen und zu füllen. Ich habe pool_timeout auf 43200 (zwölf Stunden) eingestellt, aber ich bekomme immer noch Socket-Timeouts.Vermeiden von Socket-Timeouts in SQLAlchemy

engine = sqlalchemy.create_engine(
      'postgresql+pg8000://gdwatson:[email protected]/dbname', 
      pool_timeout=43200) 
db.tables.meta.drop_all(bind=engine) 
db.tables.meta.create_all(bind=engine) 

conn = engine.connect() 
dataset = build_dataset() 
conn.execute(db.tables.mytable.insert(), 
      dataset) 
conn.close() 

ich am Ende socket.timeout: timed out nach einem guten Maß an Verarbeitungszeit bekommen, aber wahrscheinlich weniger als einer Stunde und mit Sicherheit unter zwei. Es ist eigentlich drei Ebenen tief - während der Behandlung der Timeout-Ausnahme trat eine andere auf, und dann, als diese behandelt wurde, trat eine weitere auf. (Vielleicht versucht dies die Bibliothek erneut?) Die Ausnahme tritt in conn.execute auf, und ich weiß nicht, wie ich das verhindern kann.

Eine Suche hat nichts Informatives ergeben. Ich verwende Python 3.1 und SQLAlchemy 0.6.1, für was es wert ist.

+0

Ich endete Datensatz in 1000-Eintrag Chunks schneiden und es ein Stück nach dem anderen einfügen. Das hat das Problem umgangen, auch wenn es ein bisschen hässlicher ist. –

Antwort

2

Ich weiß nicht, ob dies die empfohlene Methode ist, aber Sie könnten regelmäßig eine SELECT 1-Anweisung senden und sicherstellen, dass die Verbindung nicht im Leerlauf ist.
Sie könnten auch in this für einige Leitlinien suchen