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