我可能正在思考这个问题(或者解开这个问题),但我对如何从SQLAlchemy中的多对多表中删除单行感到困惑。文档花了很多时间讨论级联删除,这里的例子通常也与搜索事物或做多行有关。
但我想从关联表中删除仅行。
这是我的设置。对于餐馆应用程序,我正在为客人绘制晚餐。我没有在“晚餐”或“客人”表格中显示所有行。
在models.py中:
guest_dinner = db.Table('guest_dinner',
db.Column('guest_id', db.Integer, db.ForeignKey('guest.id')),
db.Column('dinner_id', db.Integer, db.ForeignKey('dinner.id')))
class Dinner(db.Model):
__tablename__='dinner'
id = db.Column(db.Integer, primary_key=True)
date = db.Column(db.Date)
guests = db.relationship('Guest',
secondary=guest_dinner,
back_populates='dinners')
class Guest(db.Model):
__tablename__='guest'
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String(256))
dinners = db.relationship('Dinner',
secondary=guest_dinner,
back_populates='guests')
然后在我的view.py中:
# dinner_id and guest_id are passed as parameters
dinner = Dinner.query.get(dinner_id)
guest = Guest.query.get(guest_id)
if dinner == None or guest == None:
flash('Record does not exist')
return redirect(url_for('index'))
# WHAT GOES HERE? to delete from association table only
就是这样。我不想删除晚餐或客人。我想删除一个客人参加特定晚宴的事实,即仅在guest_dinner中记录。