#python #database #sqlite #sqlalchemy #flask-sqlalchemy
Вопрос:
Как удалить запись из базы данных, хранящейся в Flask SQLAlchemy? Я сделал это так, и он все еще показывает такую ошибку :
sqlalchemy.exc.InvalidRequestError: Instance '<users at 0x1d6436a3be0>' is not persisted
Это имя базы данных:
db = SQLAlchemy(app)
class users(db.Model):
_id = db.Column("id", db.Integer, primary_key=True)
name = db.Column("name", db.String(100))
email = db.Column("email", db.String(100))
def __init__(self, name, email):
self.name = name
self.email = email
Это метод, который я использовал:
@app.route("/view", methods=["POST", "GET"])
def view():
if "user" in session:
user = session["user"]
if request.method == "POST":
user = request.form["nm"]
session["user"] = user
found_user = users.query.filter_by(name=user).first()
email = found_user.email
if found_user:
usr = users(user, email)
db.session.delete(usr)
db.session.commit()
flash("An Account has been Deleted!")
else :
flash("Name is not found")
else:
return render_template("view.html", values=users.query.all())
else:
flash("Please Login First")
return redirect(url_for("login"))
Комментарии:
1. можете ли вы добавить ошибку в свой вопрос?
2. Мне жаль, что я забыл добавить его, теперь он уже добавлен
Ответ №1:
Вы пытаетесь удалить новый экземпляр пользователя. Который вы создали с помощью
usr = users(user, email)
Поскольку пользователь, электронная почта не является первичным ключом, это другой экземпляр пользователя, чем пользователь, которого вы пытаетесь удалить. Вы должны удалить found_user.
напр.:
if found_user:
db.session.delete(found_user)
db.session.commit()
flash("An Account has been Deleted!")
Комментарии:
1. Большое вам спасибо, это сработало
found_user
, сначала я подумал, что он используетusr
вместоfound_user
2. @HansViz, если можно, я внесу предложение. Поскольку вы выбираете пользователей по их имени пользователя, возможно, вам захочется сделать этот столбец уникальным в спецификации табличной модели.