在模型中存储运行时信息的最佳方法是什么? 将模型存储在模型中(如在线/离线等)是个好主意
例如:
class User(Base):
__tablename__ = 'users'
id = Column(Integer, primary_key=True)
username = Column(String, unique=True, nullable=False)
fullname = Column(String, default='')
password = Column(String, nullable=False)
role = Column(String, nullable=False)
status = {0: "Offline", 1: "Online", -1: "Unknown"}
def __init__(self, **kwargs):
Base.__init__(self, **kwargs)
self.init_status()
@orm.reconstructor
def init_status(self):
self._online = 0
@property
def online(self):
if self._online is None:
self._online = 0
if self.enable:
return self._online
return -1
@online.setter
def online(self, value):
if value != self.online:
dispatcher.send(sender=self, signal="state", value=value)
self._online = value
如果我从会话中得到对象,就像 user = session.query(User).get(1) 改变状态 user.online = 1 在session.close()之后,我有了分离对象
我是否总是必须在commit()之后和close()之前执行expunge(user) 如果我想改变它,我必须将它添加到新的会话,然后再次提交,删除,关闭
还有其他方法吗?
P.S。 什么是最常用的练习,创建DAO层或会话它像DAO层一样自行工作?
我需要在应用程序的整个生命周期中访问此状态,但是我认为它并不是一直使用一个会话的好方法。 正确的方法,打开会话,用数据库做我所有的东西,然后关闭会话。但后来我失去了我的状态。
在java中我有DAO层和业务对象,它存储我的所有数据库字段和所有状态,而不管会话。 但是使用SA我已经有了session,DBO对象和Manager对象。我不想创建这么多层,我认为它不是pythonic。
感谢。
答案 0 :(得分:-1)
您应该将状态也存储在DB而不是内存中。
由于它不是用户数据,最好是具有用户ID FK的不同表UserSession。 如果这样做,您也可以存储其他数据,例如lastlogintime。 甚至做出明智的决定,比如lastlogintime> 30分钟,您可以将状态更改为离线。
将这种状态存储在记忆中不是一个好主意。