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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何将sqlalchemy中列的默认值设置为关系中列的值?相关的知识,希望对你有一定的参考价值。

我正在为sqlite数据库设置Sqlalchemy映射器。我的User类与我的Team类之间存在不可为空的关系。我已经拥有的代码如下:

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的语法

有一个简单的方法吗?

答案

SuperShoot的第一个建议,使用sql expression as the default似乎工作。特别,

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

给了我我需要的逻辑。

以上是关于如何将sqlalchemy中列的默认值设置为关系中列的值?的主要内容,如果未能解决你的问题,请参考以下文章

Big Query Tables 中列的默认值

如何根据pig中列的不同值拆分关系

代码优先迁移中列的 EF6 Oracle 默认值

将定义集中的值设置为 Pandas 数据框中列的给定值(f.e. NaN)

如何根据 SqlAlchemy 关系设置模型默认值?

如何根据SqlAlchemy关系设置模型默认值?