gpt4 book ai didi

Python Flask 未从 SQLAlchemy 数据库中删除正确的 ID

转载 作者:行者123 更新时间:2023-12-01 09:21:06 25 4
gpt4 key购买 nike

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

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

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

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

enter image description here

如果我单击表中第一行的Delete,它就可以正常工作。

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

这是我的数据库模型:

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/<int:post_id>/update_actual", methods=['GET', 'POST'])
@login_required
def update_actual_post(post_id):
post = ActualPost.query.get_or_404(post_id)
if post.actual_author != current_user:
abort(403)
form = PostActualForm()
if form.validate_on_submit():
post.title_actual = form.title_actual.data
post.category_actual = form.category_actual.data
post.actual_amount_name = form.actual_amount_name.data.name
post.actual_amount = form.actual_amount.data
post.comments = form.comments.data
db.session.commit()
flash('Your post has been updated!', 'success')
return redirect(url_for('main.actual', post_id=post.id))
elif request.method == 'GET':
form.title_actual.data = post.title_actual
form.category_actual.data= post.category_actual
form.actual_amount_name.data = post.actual_amount_name
form.actual_amount.data = post.actual_amount
form.comments.data = post.comments
return render_template('create_actual_post.html', title='Update Actual',
form=form, legend='Update Actual')


@posts.route("/post/<int:post_id>/delete_actual", methods=['POST'])
@login_required
def delete_actual_post(post_id):
post = ActualPost.query.get_or_404(post_id)
if post.actual_author != current_user:
abort(403)
db.session.delete(post)
db.session.commit()
flash('Your post has been deleted!', 'success')
return redirect(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-alchemy 模态:

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)

Controller :

@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>

关于Python Flask 未从 SQLAlchemy 数据库中删除正确的 ID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50784425/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com