处理SQL Alchemy会话。

时间:2014-02-27 14:12:36

标签: python postgresql session sqlalchemy cherrypy

目前,我的项目结构如下:

project-name/libs/__init__.py
                 /module-1
                 /module-2

我已在 init .py

中声明了我的sqlalchemy会话
engine = create_engine('postgresql+psycopg2://' + configurations.DB_USERNAME + ':' + configurations.DB_PASSWORD + '@' + configurations.DB_HOST +'/' + configurations.DB_NAME,echo=True)
sm = orm.sessionmaker(bind=engine, autoflush=True, autocommit=False,
    expire_on_commit=True)
session = orm.scoped_session(sm)

然后我在需要进行查询的任何地方使用此会话。

目前,我正面临这个问题:

This Session's transaction has been rolled back due to a previous exception during flush. To begin a new transaction with this Session, first issue Session.rollback(). Original exception was: (DataError) invalid input value for enum exchange: "BS1"

我还没有完成此查询。我已经更改了数据库,但错误仍然存​​在。所以,我认为会议仍然存在。我试过刷新会话/回滚,但没有任何帮助。

我的另一个问题是我永远不会关闭会话。我该如何实现这一目标? (这是一个网络应用程序)

1 个答案:

答案 0 :(得分:-1)

为了安全起见,在每次使用数据库之前创建一个新会话,同时将你的代码放入try中,并在finally中使用session.rollback()和session.flush()来捕获异常。

要立即修复您的问题,请重新启动mysql服务器