Python 烧瓶-SQLAlchemy多对多原因SQLAlchemy.orm.exc.FlushError
当我运行它时,它会抛出 sqlalchemy.orm.exc.FlushError:尝试将类型为的项刷新为集合“Studio.show”的成员。应为类型为的对象或此类型的多态子类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):
我按照你的回答。我不明白是什么导致了这个错误。欢迎提供任何帮助。在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)