如何使用sql.alchemy.orm.validates使用来自其他表的信息来验证表字段?

时间:2019-07-16 14:33:20

标签: python sqlalchemy

想象一下,我有2个表PersonGroup。这两个表之间存在关系。 Person有一个nickname,并且nickname在链接Group的{​​{1}}中必须是唯一的。我将如何为Person表编写validate_nickname

我想收集要添加的Person所属的nickname的{​​{1}}中的每个Person,并验证是否已经添加了Group存在。我不确定如何查询每个Person,因为我无法访问nickname内部的任何Person

小玩具示例:

SQLAlchemy.Session

1 个答案:

答案 0 :(得分:1)

感谢@IljaEverilä的回答。我向group_id添加了一个Person外键(我在示例中忘记添加了此外键),并向group_id添加了带有name__table_args__的UniqueConstraint。 / p>

from sqlalchemy.orm import validates, relationship
from sqlalchemy.schema import UniqueConstraint

class Group(Base):
    __tablename__ = 'group'

    id = Column(Integer, primary_key=True)
    name = Column(String)

class Person(Base):
    __tablename__ = 'person'
    __table_args__ = (
        UniqueConstraint('group_id', 'nickname', name='_group_id_nickname_uc'),
    )
    id = Column(Integer, primary_key=True)
    name = Column(String)
    nickname = Column(String)

    group_id = Column(Integer, ForeignKey('group.id'))
    group = relationship("Group")