Список смежности SQLAlchemy — ограничение родительского идентификатора, не равного ID

#python #database #sqlalchemy #constraints

#python #База данных #sqlalchemy #ограничения

Вопрос:

Я реализую список смежности в SQL Alchemy, который у меня работает. Здесь это основной пример узла. У меня это работает.

 class Node(Base):
    __tablename__ = 'node'
    id = Column(Integer, primary_key=True)
    parent_id = Column(Integer, ForeignKey('node.id'))
    data = Column(String(50))
    children = relationship("Node")
 

Но я хочу применить ограничение, где parent_id != id . То есть строка не может быть ее собственным родителем. Я не уверен, как обеспечить это. Нужно ли мне использовать a @validates или есть ограничение DB, которое я могу установить для столбцов.

Ответ №1:

Вы можете использовать либо @validates либо ограничение db. Ограничение будет выглядеть следующим образом:

 import sqlalchemy as sa

class Node(Base):
    __tablename__ = 'node'
    id = sa.Column(sa.Integer, primary_key=True)
    parent_id = sa.Column(sa.Integer, sa.ForeignKey('node.id'))
    data = sa.Column(sa.String(50))
    children = orm.relationship("Node")

    __table_args__ = (sa.CheckConstraint('parent_id != id'),)
 

Комментарии:

1. Спасибо. Я смог добавить метод @validates, но я буду помнить о CheckConstraint на будущее.