SQLAlchemy-删除多对多关系中的项目

时间:2020-04-19 01:27:38

标签: python sqlalchemy

我的Dish和Menu对象之间存在这种多对多关系:

class Dish(db.Model):
    __tablename__='dish'

    id = db.Column(db.Integer, primary_key=True)
    dish_name = db.Column(db.String(50)) # name given by user
    created = db.Column(db.DateTime, default=func.now())        
    user_id = db.Column(db.Integer, db.ForeignKey('users.id')) # new
    menu_id = db.Column(db.Integer, db.ForeignKey('menu.id'))

    menu = db.relationship('Menu',
                    back_populates='dishes',
                    uselist=False)

和:

class Menu(db.Model):
    __tablename__='menu'

    id = db.Column(db.Integer, primary_key=True)
    created = db.Column(db.DateTime, default=func.now(), nullable=False)       
    user_id = db.Column(db.Integer, db.ForeignKey('users.id'))

    dishes = db.relationship('Dish',
                            back_populates='menu',
                            uselist=True)

另外,我有用户:

class User(db.Model):   
    __tablename__ = 'users'

    id = db.Column(db.Integer, primary_key=True, autoincrement=True)

    menu = db.relationship("Menu",
                    backref=db.backref('user'), 
                    uselist=True)

我知道我可以从Dish表中删除“ dish”,就像这样:

dish = 'pasta'
db.session.query(Dish).filter(Dish.dish_name==dish).delete()

但是我需要删除此项目,将其从“菜单”中删除,并确保仅从该特定用户中删除表,并通过以下方式进行查询:

user = User.query.filter_by(id=user_id).first().

问题

如何从“菜”,“菜单”中删除“菜”并通过user.id过滤(加入?)?

0 个答案:

没有答案
相关问题