尝试以多对多关系追加到桥接表时出现警告错误“SELECT 语句具有笛卡尔积”

问题描述 投票:0回答:1

我想要两张桌子。一个想法和另一个标签。这种关系应该是多对多的。

我创建了一个桥接表:

tag_idea = db.Table('tag_idea', 
        db.Column('idea_id', db.Integer, db.ForeignKey('idea.id')),
        db.Column('ideatag_id', db.Integer, db.ForeignKey('idea_tag.id'))
        )

这是我的两个模型:

class Idea(db.Model, UserMixin):
    id = db.Column(db.Integer, primary_key=True)
    idea_name = db.Column(db.String(40), nullable=False)
    idea = db.Column(db.String(5000), nullable=False)
    idea_owner = db.Column(db.Integer, db.ForeignKey('user.id'), nullable=False)
    idea_category = db.Column(db.Integer, db.ForeignKey('category.id'), nullable=False)
    tags = db.relationship('IdeaTag', secondary=tag_idea, backref='ideas',
            primaryjoin=tag_idea.c.idea_id==id,
            secondaryjoin=tag_idea.c.ideatag_id==id)


class IdeaTag(db.Model, UserMixin):
    id = db.Column(db.Integer, primary_key=True)
    tag = db.Column(db.String(25), nullable=False)
    tag_owner = db.Column(db.Integer, db.ForeignKey('user.id'), nullable=False)
    

所以为了测试这个,我将一个测试想法加载到

test
中,并将一个测试标签加载到
testtag

添加到桥接表中,我认为我应该能够使用:

idea.tags.append(testtag)

但是我收到以下错误:

SAWarning: SELECT statement has a cartesian product between FROM element(s) "tag_idea", "idea" and FROM element "idea_tag".  Apply join condition(s) between each element to resolve.

从表面上看,我实际上并没有输入 SELECT 语句,因此我不知道如何在 SELECT 语句中应用联接。我该如何解决这个问题?

python flask flask-sqlalchemy
1个回答
0
投票

我通过将 backref 参数设置为此来修复此问题:

backref=db.backref('ideas', lazy='dynamic'), lazy='dynamic,

© www.soinside.com 2019 - 2024. All rights reserved.