使用现有id创建新对象

2024-04-16 08:22:33 发布

您现在位置:Python中文网/ 问答频道 /正文

我使用SQLAlchemy来定义一个User类。你知道吗

如果一个用户没有登录到我的网站,我想把他标识为AnonymousUser。我希望我的AnonymousUser是普通User类的一个子类,使用特殊的方法(例如is_anonymous(self): return true)。你知道吗

现在,有一个我最初在数据库中创建的匿名用户,使用id = 0。你知道吗

我想将AnonymousUser定义为User的子类,其中构造函数只返回匿名用户:

class AnonymousUser(User):
    def __init__(self):
        anonymous_user = User.get_by_id(0)
        self.username = anonymous_user.username
        self.id = anonymous_user.id
        ...

但是,当我创建一个AnonymousUser时,它不理解我不想要一个新的User,而只是创建一个现有的User,它将新的User的创建提交给会话,并且由于id已经被设置为现有的匿名用户id,它由于id唯一性条件而崩溃

如何告诉SQLAlchemy使用现有的id创建一个User对象?你知道吗

有没有更优雅的方式来做我想做的事?你知道吗

我知道我可以通过使用User.get_by_id(0)简单地定义一个匿名用户,但是接下来我必须在我的对象中添加一个is_anonymous字段,并且每次我检查我的用户是否是匿名的时候都有一个变量检查(而不是有两个不同的类,一个带有普通实现is_anonymous: return False,另一个使用is_anonymous: return True


Tags: 用户selfidgetbyreturn定义sqlalchemy