由“mysql服务器已经消失”引起的--sqlalchemy

时间:2013-08-19 04:11:17

标签: python mysql sqlalchemy relation

伙计们。我需要一些帮助。前几天,我在我们的服务器上部署了我的网络项目,一切运行良好。但是第二天早上我把页面搞定了,我收到一个错误“Mysql服务器已经消失......”,然后我检查了原因。我发现它是由Msyql的“wait_timeout = 2880000”和 “interactive_timeout = 2880000”,我也得到了一些解决方案,例如“set create_recycle = 7200 when create_engine”但它不起作用。我继续搜索它的方法。有人说'我们必须在使用后执行session.close()if '。我打算尝试一下,但还有另一个错误。我使用sqlalchemy.orm.relation,类User和Role之间有很多关系。现在我添加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

那么我怎样才能解决我的问题。非常感谢!

1 个答案:

答案 0 :(得分:1)

将用户实例添加到打开的会话中。

# 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

然后关闭会话。

databaseSession.close()