首页 > 解决方案 > SQLAlchemy 邻接列表 - 约束 parent_id 不等于 ID

问题描述

我正在使用的 SQL Alchemy 中实现邻接列表。是 Node.js 的基本示例。我有它的工作。

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或者是否有可以在列上设置的数据库约束。

标签: pythondatabasesqlalchemyconstraints

解决方案


您可以使用其中一个@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'),)

推荐阅读