Фильтр SQLAlchemy по дате не возвращает ничего, даже если дата существует - PullRequest
0 голосов
/ 12 октября 2019

Я работаю над кодом 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) Не удалось выполнить ограничение UNIQUE: событие. date [SQL: INSERT INTO event (requestter_id, name, date) 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:
...