Python 烧瓶-SQLAlchemy多对多原因SQLAlchemy.orm.exc.FlushError

Python 烧瓶-SQLAlchemy多对多原因SQLAlchemy.orm.exc.FlushError,python,sqlalchemy,many-to-many,flask-sqlalchemy,Python,Sqlalchemy,Many To Many,Flask Sqlalchemy,当我运行它时,它会抛出 sqlalchemy.orm.exc.FlushError:尝试将类型为的项刷新为集合“Studio.show”的成员。应为类型为的对象或此类型的多态子类 我按照你的回答。我不明白是什么导致了这个错误。欢迎提供任何帮助。在a和使用之间似乎有点混淆(这是多对多的变体)。考虑到您配置模型的方式,Show.studio实际上是一个带有ShowStudio的集合,因此它需要的是一组ShowStudio对象,而不是studio: class Show(db.Model):

当我运行它时,它会抛出

sqlalchemy.orm.exc.FlushError:尝试将类型为的项刷新为集合“Studio.show”的成员。应为类型为的对象或此类型的多态子类


我按照你的回答。我不明白是什么导致了这个错误。欢迎提供任何帮助。

在a和使用之间似乎有点混淆(这是多对多的变体)。考虑到您配置模型的方式,Show.studio实际上是一个带有ShowStudio的集合,因此它需要的是一组ShowStudio对象,而不是
studio

class Show(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    title = db.Column(db.String(200), unique=True, nullable=False)
    studio = db.relationship("ShowStudio", backref="show", cascade="delete")

class Studio(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(100), unique=True, nullable=False)
    show = db.relationship("ShowStudio", backref="studio", cascade="delete")

class ShowStudio(db.Model):
    show_id = db.Column(db.Integer, db.ForeignKey(Show.id, ondelete="CASCADE"), primary_key=True)
    studio_id = db.Column(db.Integer, db.ForeignKey(Studio.id, ondelete="CASCADE"), primary_key=True)

studio = Studio(name="asd")

db.session.add(studio)
s = Show(title="a", studio=[studio])
db.session.flush()

db.session.add(s)
db.session.commit()
对于您最初的工作尝试,您可以使用
ShowStudio
下面的表定义
ShowStudio
Studio
之间的多对多关系:


由于在ShowStudio中没有明确的
\uuuuu tablename\uuuuuu
来显示\u studio。

@IljaEverilä你能提供一个例子来解释不同的情况吗?对我来说,从文档中看起来是一样的。相关:。
studio = Studio(name="asd")    
db.session.add(studio)

showstudio = ShowStudio(studio=studio)
# You've disabled save-update cascade, so you have to
# add the association object to the session manually!
db.session.add(showstudio)

s = Show(title="a", studio=[showstudio])
db.session.add(s)

db.session.commit()
class Show(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    title = db.Column(db.String(200), unique=True, nullable=False)
    studio = db.relationship("Studio", secondary="show_studio",
                             back_populates="show")

class Studio(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(100), unique=True, nullable=False)
    show = db.relationship("Show", secondary="show_studio",
                           back_populates="studio")

class ShowStudio(db.Model):
    show_id = db.Column(db.Integer, db.ForeignKey(Show.id, ondelete="CASCADE"),
                        primary_key=True)
    studio_id = db.Column(db.Integer, db.ForeignKey(Studio.id, ondelete="CASCADE"),
                          primary_key=True)