2013-04-22 107 views
2

我使用的是瓶的SQLAlchemy的SQL抽象層,按照這裏所示模式http://flask.pocoo.org/docs/patterns/sqlalchemy/與瓶和SQLAlchemy的

engine = create_engine('postgresql://' + DB_USER + ':' + DB_PASS + '@' + DB_HOST + ':' + DB_PORT + '/' + DB_NAME) 
session = scoped_session(sessionmaker(autocommit=True, 
            autoflush=True, 
            bind=engine)) 

`

metadata = MetaData() 

Base = declarative_base(metadata=metadata) 
Base.metadata.reflect(engine) 

與 「客戶端連接意外EOF」 scoped_session在發送響應之前通過teardown_request修飾器移除

@app.teardown_request 
def shutdown_db_connexion(exception=None): 
    db.session.remove() 

一切似乎工作正常,除了我在我的postgres日誌中看到很多以下行,這似乎表明與數據庫客戶端連接的一些問題。

"unexpected EOF on client connection" 
"could not receive data from client: Connection reset by peer" 

任何有關如何調試和解決這個問題的想法嗎?

回答

1

看看其餘的服務器日誌,看起來這是一個操作系統OOM問題。標記爲已解決。

1

你應該叫

engine.dispose()

0

在我的情況下,在節目的最後調用這些代碼幫助:

session.close_all() 
engine.dispose() 

,所以該完整SQLAlchemy的工作流程是這樣的:

DBSession = scoped_session(sessionmaker(...)) 
... 
engine = create_engine(...) 
DBSession.configure(bind=engine) 
... 
DBSession().query(...) 
... 
DBSession().query(...) 
... 
DBSession.close_all() 
engine.dispose()