我正在使用sqlalchemy的sql抽象层和Flask,遵循此处指示的模式http://flask.pocoo.org/docs/patterns/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)
使用scoped_session,在发送响应之前使用teardown_request装饰器删除
@app.teardown_request
def shutdown_db_connexion(exception=None):
db.session.remove()
除了我在postgres日志中看到很多以下行之外,所有内容似乎都运行良好,这似乎表明db客户端连接存在一些问题。
"unexpected EOF on client connection"
"could not receive data from client: Connection reset by peer"
有关如何调试此问题并修复正在发生的事情的任何想法吗?
答案 0 :(得分:1)
查看其余的服务器日志,似乎这是OS OOM问题。将此标记为已解决。
答案 1 :(得分:1)
你应该致电
engine.dispose()
答案 2 :(得分: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()