我正在学习数据库,并试图注入sql数据库的网站。我有从网站上删除电影卡的按钮。查看选择功能!但是当我运行我的代码时,它并没有从数据库中删除行,为什么?我试图阅读文档并询问chatgpt,但它并没有给我任何可能性来解决这个问题......抱歉问了个愚蠢的问题
from flask import Flask, render_template, redirect, url_for, request
from flask_bootstrap import Bootstrap
from flask_sqlalchemy import SQLAlchemy
from flask_wtf import FlaskForm
from wtforms import StringField, SubmitField, IntegerField, FloatField, URLField
from wtforms.validators import DataRequired, NumberRange, URL
import requests
from sqlalchemy import update
app = Flask(__name__)
app.config['SECRET_KEY'] = '8BYkEfBA6O6donzWlSihBXox7C0sKR6b'
Bootstrap(app)
app.config['SQLALCHEMY_DATABASE_URI'] = "sqlite:///film-rating.db"
db = SQLAlchemy(app)
class AddForm(FlaskForm):
title = StringField("Title", validators=[DataRequired()])
year = IntegerField("Year", validators=[NumberRange()])
description = StringField("Description", validators=[DataRequired()])
rating = FloatField("Rating", validators=[NumberRange()])
ranking = IntegerField("Ranking", validators=[NumberRange()])
review = StringField("Review", validators=[DataRequired()])
img_url = URLField("Image URL", validators=[URL()])
submit = SubmitField("Submit data")
class EditForm(FlaskForm):
rating = FloatField("Your rating e.g 7.8/10", validators=[NumberRange()])
review = StringField("Your review", validators=[DataRequired()])
submit = SubmitField("Submit your changes")
class FilmForm(db.Model):
id = db.Column(db.Integer, primary_key=True)
title = db.Column(db.String(250), nullable=False)
year = db.Column(db.Integer, nullable=False)
description = db.Column(db.String, nullable=False)
rating = db.Column(db.Float, nullable=False)
ranking = db.Column(db.Integer, nullable=False)
review = db.Column(db.String(250), nullable=False)
image_url = db.Column(db.String, nullable=False)
def __init__(self, title, year, description, rating, ranking, review, image_url):
self.title = title
self.year = year
self.description = description
self.rating = rating
self.ranking = ranking
self.review = review
self.image_url = image_url
@app.route("/")
def home():
all_films = FilmForm.query.all()
return render_template("index.html", all_films=all_films)
@app.route('/add', methods=["POST", "GET"])
def add():
form = AddForm()
if form.validate_on_submit():
title = request.form.get("title")
year = request.form.get("year")
description = request.form.get("description")
rating = request.form.get("rating")
ranking = request.form.get("ranking")
review = request.form.get("review")
img_url = request.form.get("img_url")
return redirect(url_for("home"))
return render_template("add.html", form=form)
@app.route('/edit', methods=["GET", "POST"])
def edit():
form = EditForm()
if form.validate_on_submit():
new_rating = request.form.get("rating")
new_review = request.form.get("review")
with app.app_context():
movie_id = 1
movie = FilmForm.query.get(movie_id)
movie.rating = new_rating
movie.review = new_review
db.session.commit()
return redirect(url_for("home"))
return render_template("edit.html", form=form)
@app.route('/select')
def select():
movie_id = request.args.get('movie_id')
movie = FilmForm.query.get(movie_id)
db.session.delete(movie)
return redirect(url_for("home"))
if __name__ == '__main__':
with app.app_context():
db.create_all()
app.run(debug=True
1条答案
按热度按时间yzxexxkh1#
首先,你的
FilmForm.__init__()
是没有意义的:它并没有增加任何已经无法完成的事情。另外,我不知道这是不是真实的代码,或者只是为了举例,我也不知道你没有调用super().__init__()
是不是一个错误。您没有显示如何创建会话。你有
autocommit=True
吗?如果没有,那么你的session.commit()
调用在哪里?如果你没有调用这个函数,那么你删除的内容就不会被持久化.(另外,我看不出你实际上在哪里add
任何数据库)您应该在每个http请求的开头创建一个scoped_session,并在每个http请求的结尾提交/回滚。或者,您应该使用
autocommit=True