3

我正在使用带有 Flask 的 sqlalchemy 的 sql 抽象层,遵循此处指示的模式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)

在发送响应之前使用 teardown_request 装饰器删除 scoped_session

@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"

关于如何调试和修复正在发生的任何事情的任何想法?

4

3 回答 3

1

你应该打电话

engine.dispose()

于 2013-11-09T03:13:54.287 回答
1

查看其余的服务器日志,这似乎是操作系统 OOM 问题。将此标记为已解决。

于 2013-04-22T17:41:46.717 回答
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()
于 2018-01-23T21:20:44.777 回答