Как установить значение столбца по умолчанию в sqlalchemy на значение столбца из отношения? - PullRequest
0 голосов
/ 26 апреля 2019

Я настраиваю Sqlalchemy mapper для базы данных sqlite. Мой класс 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

Есть ли простой способ сделать это?

1 Ответ

1 голос
/ 26 апреля 2019

Первое предложение от SuperShoot, использующее выражение sql в качестве значения по умолчанию , похоже, работает. В частности,

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

дает мне необходимую логику.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...