2010-08-18 71 views
5

我是SQLAlchemy的新手,但我試圖用它來創建和填充個人項目的數據庫。我已將pool_timeout設置爲43200(十二小時),但我仍然遇到套接字超時。在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() 

我結束了一個很好的協議的處理時間後得到socket.timeout: timed out,但可能不到一個小時,肯定下的兩個。它實際上是三個層次 - 處理超時異常另一個發生,然後當處理另一個時發生。 (也許這是圖書館重試?)conn.execute發生異常,我不知道如何防止它。

搜索尚未顯示任何信息。我正在使用Python 3.1和SQLAlchemy 0.6.1,因爲它值得。

+0

我最終將數據集切片成1000個條目塊並一次插入一個塊。這解決了問題,即使它有點醜陋。 – 2010-08-29 05:58:39

回答

2

我不知道這是否是推薦的方法,但您可以定期發送SELECT 1聲明並確保連接不是空閒的。
你也可以看看this的一些指導