sqlalchemy删除函数的问题,我想删除一个项目,但它实际上删除了整个类别?

2024-09-30 03:24:40 发布

您现在位置:Python中文网/ 问答频道 /正文

this is my github link

我在这个项目中使用sqlalchemy。在

除了delete函数之外,所有的操作都对CRUD运行良好。在

只是想知道发生了什么事?在

# Edit the specific item
@app.route('/catalog/<int:categories_id>/<int:items_id>/edit',
           methods=['GET', 'POST'])
@login_required
def editItem(categories_id, items_id):
    editedItem = session.query(CategoryItem).filter_by(id=items_id).one()
...
    if request.method == 'POST':
...
        session.add(editedItem)
        session.commit()
        flash("item edited successfully!")
        return redirect(url_for('showItem', categories_id=categories_id,
                                items_id=items_id))
    else:
        return render_template('edititem.html', categories_id=categories_id,
                               items_id=items_id, item=editedItem)


# Delete the specific item
@app.route('/catalog/<int:categories_id>/<int:items_id>/delete',
           methods=['GET', 'POST'])
@login_required
def deleteItem(categories_id, items_id):
    itemToDelete = session.query(CategoryItem).filter_by(id=items_id).one()
...
    if request.method == 'POST':
        session.delete(itemToDelete)
        session.commit()
        flash("item deleted successfully!")
        return redirect(url_for('showCategories', categories_id=categories_id))
    else:
        return render_template('deleteitem.html', categories_id=categories_id,
                               items_id=items_id, item=itemToDelete)

正如你在代码中看到的。在

editItem和deleteItem都在使用会话.查询(CategoryItem)。筛选依据(id=items_id).one()

但是当我删除这个项目的时候。在

不是单个项目被删除,而是整个类别被删除。在

请参阅下面的模板

^{pr2}$

我不知道是什么引起了这个问题。在


Tags: the项目idreturnsessionitemsitemdelete
1条回答
网友
1楼 · 发布于 2024-09-30 03:24:40

这是因为您设置了与cascadedelete-orphan的关系。在

class Categories(Base):
    __tablename__ = 'categories'
    id = Column(Integer, primary_key=True)
    name = Column(String(250), nullable=False)
    user_id = Column(Integer, ForeignKey('user.id'))
    user = relationship(User)

    @property
    def serialize(self):
        return {
            'name': self.name,
            'id': self.id,
        }


class CategoryItem(Base):
    __tablename__ = 'category_item'
    name = Column(String(80), nullable=False)
    id = Column(Integer, primary_key=True)
    description = Column(String(250))
    categories_id = Column(Integer, ForeignKey('categories.id'))
    categories = relationship(Categories, cascade="all, delete-orphan",
                              single_parent=True)
    user_id = Column(Integer, ForeignKey('user.id'))
    user = relationship(User)

    @property
    def serialize(self):
        return {
            'name': self.name,
            'description': self.description,
            'id': self.id,
        }

CategoryItem表是父表。您正在它内部设置一个关系,将Categories作为子对象。当您有cascage='delete-orphan'时,这包括级联删除,但是添加了行为(您可以在这里阅读更多关于它的信息:http://docs.sqlalchemy.org/en/latest/orm/cascades.html#delete

尝试从级联参数中删除delete-orphan

相关问题 更多 >

    热门问题