[英]Flask Many to Many loop through id to insert data to table not working
我正在尝试将数据追加到表
>>> paper = ['1', '2']
>>> work = Work(name="Sample", cost="500")
>>> db.session.add(work)
>>> for pape1 in paper:
>>> paper1 = Paper.query.filter_by(id=pape1).first()
>>> paper1.pages.append(work)
>>> db.session.add(paper1)
>>> db.session.commit()
models.py
papers = db.Table('papers',
db.Column('work_id', db.Integer, db.ForeignKey('work.id'), primary_key=True),
db.Column('paper_id', db.Integer, db.ForeignKey('paper.id'), primary_key=True)
)
class Work(db.Model):
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String(90), nullable=False)
page = db.relationship('Paper', secondary=papers, lazy='subquery',
backref=db.backref('pages', lazy=True), uselist=False)
cost = db.Column(db.Integer)
class Paper(db.Model):
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String(90), nullable=False)
我想我应该得到这样的东西。
work_id | paper_id
---------|-----------
1 1 | 1
---------|-----------
2 1 | 2
但是我明白了。 论文桌
图1。
work_id | paper_id
---------|-----------
1 1 | 2
---------------------
id = 2的论文曾经与id = 1的作品联系在一起。 但是当我开始调试时。 我看到第一次循环后,它添加到文件表。 像这样。
图2。
work_id | paper_id
---------|-----------
1 1 | 1
---------------------
但是在第二个循环之后,我认为它会将其从图2更新为图1。我不知道我在做什么错?
您将uselist
设置为False
。 不要这样做 ,您告诉SQLAlchemy page
属性应该是一个标量 ,一个元素:
page = db.relationship('Paper', secondary=papers, lazy='subquery',
backref=db.backref('pages', lazy=True), uselist=False)
一个布尔值,指示是否应将此属性作为列表或标量加载。 在大多数情况下,此值是在映射器配置时由
relationship()
根据relationship()
的类型和方向自动确定的-一对多形成一个列表,多对一形成一个标量,许多对一个列表。 如果需要标量,通常在该位置会存在一个列表,例如双向一对一关系,请将uselist
设置为False
。
您不希望设置该属性 , 而是将其留给SQLAlchemy来确定它应该是什么。 对于多对多关系,您确实希望它为True
,而当您忽略它时,这就是自动结果:
page = db.relationship('Paper', secondary=papers, lazy='subquery',
backref=db.backref('pages', lazy=True))
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.