我正在为我的课程编写Python代码,我试图检查SQL数据库中是否已经存在某些内容,因为这是唯一的条件。 Python一直是我使用过的最令人沮丧的编程语言之一,而我只是不明白为什么它不起作用。我假设太多的逻辑被抽象掉了(这是python的一个常见主题),这会导致事情中断而不应该中断
我只尝试过现在的代码,还没有弄清楚要修改什么。
@app.route("/newEvent/", methods=["GET", "POST"])
def new_event():
if "username" not in session:
return redirect(url_for("home"))
if session["status"] != "user":
return redirect(url_for("home"))
if request.method == "POST":
event_on_date = Event.query.filter_by(date=datetime.strptime(request.form["date"], "%Y-%m-%d")).first()
if event_on_date is not None:
flash("event creation failed, event already exists on date")
return redirect(url_for(home))
uid = User.query.filter_by(username=session["username"]).first()
uid = uid.id
db.session.add(Event(uid, request.form["name"],
datetime.strptime(request.form["date"], "%Y-%m-%d")))
db.session.commit()
flash("event created")
return redirect(url_for("home"))
else:
return render_template("newEvent.html")
如果输入重复日期,我会得到:
sqlalchemy.exc.IntegrityError:(sqlite3.IntegrityError)唯一约束失败:event.date [SQL:INSERT INTO事件(requester_id,名称,日期)VALUES(?,?,?) [参数:(2,'bhgiujhghjyg','2019-01-01')]
我认为,由于在输入之前会对照输入到数据库的值进行检查,因此它会在发生之前捕获它,但是,filter_By查询日期每次都会简单地返回None
event_on_date = Event.query.filter_by(date=datetime.strptime(request.form["date"], "%Y-%m-%d")).first()
if event_on_date is not None: