2010-08-18 95 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的一些指导