-1

伙计们。我需要一些帮助。几天前,我在我们的服务器上部署了我的 web 项目,一切正常。但是第二天早上我登录了页面,我收到了一个错误“Mysql server has gone away...”,然后我检查了原因。我发现它是由Msyql“wait_timeout = 2880000”和“interactive_timeout = 2880000”的conf引起的,我也得到了一些解决方案,如“set pool_recycle = 7200 when create_engine”,但它不起作用。我继续搜索方法。有人说'我们必须在使用 if 后执行 session.close()'。我打算尝试一下,但是我遇到了另一个错误。我使用了 sqlalchemy.orm.relation,之间存在 many_to_many 关系类用户和角色。现在我添加 DBSession.close() 喜欢

  @classmethod
  def get_by_id(cls, id):
    user_ = DBSession.query(cls).get(id)
    DBSession.close()
    return user_

但是现在当我这样做时

user = User.get_by_id(1)
user.roles

ERROR:Parent instance <User at 0xace51cc> is not bound to a Session;
lazy load operation of attribute 'roles' cannot proceed

那么我该如何解决我的问题。非常感谢!

4

1 回答 1

1

Add the user instance to an open session.

# assuming databaseSession is a valid session object using a valid engine
engine = create_engine('mysql://user@localhost:3600/database')
Session = sqlalchemy.orm.sessionmaker()
Session.configure(bind=engine) 
databaseSession = Session()
databaseSession.add(user)

user.roles

then close the session later.

databaseSession.close()
于 2013-08-19T04:52:58.053 回答