SQLAlchemy 邻接表 - 约束 parent_id 不等于 ID
SQLAlchemy Adjacency List - Constrain parent_id not equal to ID
我正在 SQL Alchemy 中实现邻接列表,我正在使用它。这是 Node.js 的基本示例 here。我有它的工作。
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
的位置强制执行约束。也就是说,一行不能是它自己的父级。我不确定如何执行此操作。我需要使用 @validates
还是可以在列上设置数据库约束。
您可以使用 @validates
或数据库约束。约束看起来像这样:
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'),)
我正在 SQL Alchemy 中实现邻接列表,我正在使用它。这是 Node.js 的基本示例 here。我有它的工作。
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
的位置强制执行约束。也就是说,一行不能是它自己的父级。我不确定如何执行此操作。我需要使用 @validates
还是可以在列上设置数据库约束。
您可以使用 @validates
或数据库约束。约束看起来像这样:
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'),)