如何将sqlalchemy中列的默认值设置为关系中的列值?

时间:2019-04-25 22:42:11

标签: python sqlalchemy

我正在为sqlite数据库设置Sqlalchemy映射器。我的用户类与我的团队类具有不可为空的关系。我已经拥有的代码如下:

class Team(Base):
    __tablename__ = 'teams'

    team_id = Column(Integer, primary_key=True)
    # Using Integer as holder for boolean
    is_local = Column(Integer, default=0)

class User(Base):
    __tablename__ = 'users'

    user_id = Column(Integer, primary_key=True)
    team_id = Column(Integer, ForeignKey(Team.team_id), default=1, nullable=False)
    team = relationship('Team')
    is_local = Column(Integer, default=0)

对于用户的联系小组,我想确定User.is_local的值默认为Team.is_local的值。 但是,在创建用户之后,我仍然希望能够在不更改团队或团队中任何其他用户的值的情况下修改用户的is_local值。

所以如果我要执行

faraway = Team(is_local=1)
session.add(faraway)
session.commit()

u = User(team=faraway)
session.add(u)
session.commit()

print(bool(u.is_local))

结果应为True

到目前为止,我已经按照https://stackoverflow.com/a/36579924的建议尝试了上下文相关的默认函数,但是我无法找到允许我引用Team.is_local

的语法。

有一种简单的方法吗?

1 个答案:

答案 0 :(得分:1)

SuperShoot使用sql expression as the default提出的第一个建议似乎可行。具体来说,

    is_local = Column(Integer, default=select([Team.is_local]).where(Team.team_id==team_id))

为我提供了所需的逻辑。