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

Posted

技术标签:

【中文标题】单个表错误的 SQLAlchemy 多对多关系:NoReferencedTableError【英文标题】:SQLAlchemy Many-to-Many Relationship on a Single Table Error: NoReferencedTableError 【发布时间】:2014-06-08 15:09:32 【问题描述】:

我正在使用 Flask 和 SQLAlchemy。

我正在尝试引用同一个表中的列来创建树结构,使用附加表来存储所有祖先-子连接,而不仅仅是父-子。

我在这里使用了https://***.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】:

我通过添加摆脱了错误

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

到 Category.children 定义。

仍然不知道为什么有必要。在这里找到它:https://***.com/a/8809907/2947812

【讨论】:

以上是关于单个表错误的 SQLAlchemy 多对多关系:NoReferencedTableError的主要内容,如果未能解决你的问题,请参考以下文章

SQLAlchemy如何反映多对多关系

如何避免在 SQLAlchemy - python 的多对多关系表中添加重复项?

防止 SQLAlchemy 中多对多关系中的重复表条目

Flask/SQLAlchemy - 多对多关系的关联模型和关联表之间的区别?

深入浅出Flask(50):flask_sqlalchemy的创建多对多的关系表

如何使用 SQLAlchemy 建立多对多关系:一个很好的例子