Python烧瓶未从SQLAlchemy数据库中删除正确的id

Python烧瓶未从SQLAlchemy数据库中删除正确的id,python,html,flask,sqlalchemy,Python,Html,Flask,Sqlalchemy,我有一个HTML表,它从SQLAlchemy数据库中提取数据 在这个表中,对于每一行,我都有一个Delete按钮,当我单击该按钮时,它应该删除该行和数据库条目 我遇到的问题是,如果我尝试删除此表中的任何行,它只删除第一行(请参见下图)和数据库中的关联数据 我想要删除的行和数据保持不变(下图中的第3行) 如果我单击表中第一行的Delete,它将正常工作 Update按钮按缩进方式工作(更新正确的条目) 这是我拥有的数据库模型: class ActualPost(db.Model): __

我有一个HTML表,它从SQLAlchemy数据库中提取数据

在这个表中,对于每一行,我都有一个
Delete
按钮,当我单击该按钮时,它应该删除该行和数据库条目

我遇到的问题是,如果我尝试删除此表中的任何行,它只删除第一行(请参见下图)和数据库中的关联数据

我想要删除的行和数据保持不变(下图中的第3行)

如果我单击表中第一行的
Delete
,它将正常工作

Update
按钮按缩进方式工作(更新正确的条目)

这是我拥有的数据库模型:

class ActualPost(db.Model):
    __tablename__ = 'actualpost'
    id = db.Column(db.Integer, primary_key=True, autoincrement=True)
    title_actual = db.Column(db.String(30), nullable=False, default='actual')
    category_actual = db.Column(db.String(30), nullable=False, default=None)
    actual_amount_name = db.Column(db.String(30), nullable=True)
    actual_amount = db.Column(db.Float, nullable=False)
    user_id = db.Column(db.Integer, db.ForeignKey('user.id'), nullable=False)
    date_posted = db.Column(db.DateTime, nullable=False, default=datetime.utcnow)
    comments = db.Column(db.Text, nullable=True)

    def __repr__(self):
        return f"ActualPost('{self.title_actual}, '{self.category_actual}'\
        , '{self.actual_amount_name}', '{self.actual_amount}'\
        , '{self.date_posted}', '{self.comments}')"
以下是我的路线(更新和删除)

@posts.route(“/post//update\u-actual”,方法=['GET','post']))
@需要登录
def更新实际发布(发布id):
post=ActualPost.query.get\u或\u 404(post\u id)
如果post.actual_作者!=当前用户:
中止(403)
form=PostActualForm()
if form.validate_on_submit():
post.title\u actual=form.title\u actual.data
post.category\u actual=form.category\u actual.data
post.actual\u amount\u name=form.actual\u amount\u name.data.name
post.actual\u amount=form.actual\u amount.data
post.comments=form.comments.data
db.session.commit()
flash(“您的帖子已更新!”,“成功”)
返回重定向(url_for('main.actual',post_id=post.id))
elif request.method==“GET”:
form.title\u actual.data=post.title\u actual
form.category\u actual.data=post.category\u actual
form.actual\u amount\u name.data=post.actual\u amount\u name
form.actual_amount.data=post.actual_amount
form.comments.data=post.comments
返回render_模板('create_actual_post.html',title='Update actual',
表格=表格,图例=‘实际更新’)
@posts.route(“/post//delete_-actual”,方法=['post']))
@需要登录
def delete_实际_post(post_id):
post=ActualPost.query.get\u或\u 404(post\u id)
如果post.actual_作者!=当前用户:
中止(403)
db.session.delete(post)
db.session.commit()
flash(“您的帖子已被删除!”,“成功”)
返回重定向(url_for('main.actual',post_id=post.id))
这是我用于删除按钮的HTML代码:

<div class="modal-footer">
   <button type="button" class="btn btn-secondary" data-dismiss="modal">Close</button>
   <form action="{{ url_for('posts.delete_actual_post', post_id = post.id) }}" method="post">
     <input class="btn btn-danger" type="submit" value="Delete">
   </form>
</div>

接近

这是我的代码,用于按id删除特定行。您可以将其与代码关联起来

SQL炼金术模式:

class Componants(db.Model):
    __tablename__ = 'componants'
    id = db.Column(db.Integer, primary_key=True)
    cmp_options = db.Column(db.Text, default=None)
    updated_at = db.Column(db.DateTime, nullable=True)
    created_at = db.Column(db.DateTime, nullable=True)


def __init__(self , cmp_options ):
    self.cmp_options = cmp_options 
    self.created_at = datetime.now()
    self.updated_at = datetime.now()

def __repr__(self):
    return '<id {}>'.format(self.id)
类组件(db.Model):
__tablename_uu='Components'
id=db.Column(db.Integer,主键=True)
cmp_options=db.Column(db.Text,默认值=None)
更新的_at=db.Column(db.DateTime,nullable=True)
在=db.Column处创建(db.DateTime,nullable=True)
定义初始化(自、cmp选项):
self.cmp\u options=cmp\u options
self.created_at=datetime.now()
self.updated_at=datetime.now()
定义报告(自我):
返回“”。格式(self.id)
控制器:

@componants_blueprint.route('/delete_component/<component_id>')
@login_required
def delete_component(component_id):
    component = Componants.query.filter_by(id=component_id).first_or_404()
    db.session.delete(component)
    db.session.commit() 
    return True
@components\u blueprint.route(“/delete\u component/”)
@需要登录
def delete_组件(组件id):
component=components.query.filter\u by(id=component\u id).first\u或\u 404()
db.session.delete(组件)
db.session.commit()
返回真值
视图:


{所有_组件%中的项的百分比}
{{item.id}
{{item.cmp_options}
{{item.created_at}}
{%endfor%}

您是否通过打印到控制台来确保将正确的
post\u id
传递到
get\u或_404()
方法?同样,在您的chrome/firefox开发工具中,确保您检查了表单的action属性,并确保在使用delete按钮时正确无误。感谢您提供的提示!我已经做了进一步的调查,我的html中的
模式
似乎是罪魁祸首。我把它放在了一个
for
循环中,但它没有正确地获取ID。@derzemel,看来你已经接受了我的ans,你能不能也投票给我。。。
@componants_blueprint.route('/delete_component/<component_id>')
@login_required
def delete_component(component_id):
    component = Componants.query.filter_by(id=component_id).first_or_404()
    db.session.delete(component)
    db.session.commit() 
    return True
              <tbody>
                {% for item in all_components %}
                <tr>
                  <td>{{ item.id }}</td>
                  <td>{{ item.cmp_options }}</td>
                  <td>{{ item.created_at }}</td>
                  <td class="text-center"> 
                    <a href="{{ url_for('componants.delete_component', component_id=item.id) }}" title="Delete" class="far fa-trash-alt"></a>
                  </td>    
                </tr>
                {% endfor %}
            </tbody>