[英]SQLAlchemy: What is the best way to validate a model before inserting or updating
[英]What is the best way to store runtime information in SQLalchemy model?
在模型中存儲運行時信息的最佳方法是什么? 並且最好將一個存儲在模型中(例如在線/離線等)
例如:
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),然后如果要更改它,則必須將其添加到新會話中,然后再次提交,expunge,close
還有其他方法嗎?
PS最常用的做法是創建DAO層或像DAO層一樣自我工作的會話?
我需要在應用的整個生命周期中都可以訪問這種狀態,但是由於我不了解,這並不是始終使用一個會話的好方法。 正確的方法是,打開會話,使用DB完成所有工作,然后關閉會話。 但是后來我失去了狀態。
在Java中,我具有DAO層和業務對象,它們存儲我的所有db字段和所有狀態,而與會話無關。 但是有了SA,我已經有了會話,DBO對象和Manager對象。 我不想創建太多的圖層,我認為它沒有太多的pythonic。
謝謝。
您還應該將狀態存儲在DB中,而不是存儲在內存中。
作為其非用戶數據,最好是具有用戶ID FK的不同表UserSession。 如果這樣做,您還可以存儲其他數據,例如lastlogintime。 甚至做出明智的決定,例如lastlogintime> 30分鍾,您也可以將狀態更改為離線。
在內存中存儲這種狀態不是一個好主意。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.