SQLAlchemy 单表多对多关系错误:NoReferencedTableError

1 投票
1 回答
878 浏览
提问于 2025-04-18 09:02

我正在使用Flask和SQLAlchemy。

我想在同一张表中引用某一列,以创建一个树形结构,并使用额外的表来存储所有的祖先-子代关系,而不仅仅是父子关系。

我参考了这里的一个例子 https://stackoverflow.com/a/5652169/2947812,我在models.py中的代码是:

# -*- coding: utf-8 -*-
from my_app import db    

Cats_hierarchies = db.Table('cats_hierarchies', db.MetaData(),
        db.Column('parent_id', db.Integer, db.ForeignKey('category.id')),
        db.Column('category_id', db.Integer, db.ForeignKey('category.id'))
        )

class Category(db.Model):
    __tablename__ = 'category'

    id = db.Column(db.Integer, primary_key=True)
    children = db.relationship("Category",
        secondary = Cats_hierarchies,
        primaryjoin = Cats_hierarchies.c.category_id == id,
        secondaryjoin = Cats_hierarchies.c.parent_id == id,
        backref="children")

当我尝试用 from my_app import db 创建数据库时,出现了以下错误信息:sqlalchemy.exc.NoReferencedTableError: Foreign key associated with column 'cats_hierarchies.category_id' could not find table 'category' with which to generate a foreign key to target column 'id'

我哪里做错了?

1 个回答

1

我通过在下面的代码中添加内容解决了这个错误:

foreign_keys =
   [Cats_hierarchies.c.parent_id,
   Cats_hierarchies.c.category_id])

这段代码是在定义 Category.children 的时候加上的。

不过我还是不太明白为什么这样做是必要的。这个信息我是在这里找到的:https://stackoverflow.com/a/8809907/2947812

撰写回答