#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 на будущее.