SQLAlchemy用户多对多关系

时间:2018-02-25 20:43:47

标签: python flask flask-sqlalchemy

我正在开发一个用户结构,其中用户可以拥有由用户对象组成的父项和子项。我一直试图在SQLAlchemy和Flask中以多种不同的方式使用以下内容。

以下是我想要如何构建它的示例:

UserTable
id | name
---+-----
1  | Kim
2  | Tammy
3  | John
4  | Casey
5  | Kyle

UserRelationship
id | parent_user_id | child_user_id
---+----------------+---------------
1  | 1              | 2
2  | 1              | 3
3  | 4              | 2

Kim是Tammy和John的父母。凯西是塔米的父母。 Tammy是Kim和Casey的孩子。约翰是金的孩子。凯尔没有孩子也没有父母。

我的错误是:

sqlalchemy.exc.AmbiguousForeignKeysError: Could not determine join condition 
between parent/child tables on relationship User.parents - there are multiple 
foreign key paths linking the tables via secondary table 'user_relationship'. 
Specify the 'foreign_keys' argument, providing a list of those columns which 
should be counted as containing a foreign key reference from the secondary 
table to each of the parent and child tables.

我的model.py文件如下:

user_relationship = db.Table(
    'user_relationship',
    db.Model.metadata,
    db.Column('child_user_id', db.Integer, db.ForeignKey('user.id')),
    db.Column('parent_user_id', db.Integer, db.ForeignKey('user.id'))
)

class User(db.Model):
    __tablename__ = 'user'

    id = db.Column(db.Integer, primary_key=True, unique=True, nullable=False)
    email = db.Column(db.String(120), unique=True)
    pwdhash = db.Column(db.String(54))

    parents = relationship('User',
        secondary=user_relationship,
        backref=db.backref('children'),
        cascade="all,delete")

这可能不是在Flask或SQLAlchemy中处理多对多层次用户关系的最佳方法。任何关于如何构建它的见解都会很棒。

谢谢

0 个答案:

没有答案