簡體   English   中英

在SQLalchemy模型中存儲運行時信息的最佳方法是什么?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM