Ошибка при попытке вставить данные в базу данных sql -альхимии (flask) - PullRequest
0 голосов
/ 04 февраля 2020

Пытаясь создать базовое приложение для викторины c, при попытке вставить данные в базу данных выдает ошибку

sqlalchemy.exc.IntegrityError: (sqlite3.IntegrityError) NOT NULL constraint failed: results.id
[SQL: INSERT INTO results (correct, incorrect) VALUES (?, ?)]
[parameters: (0, 1)]

, поэтому он распознает данные, которые я пытаюсь ввести, и это, по-видимому, в правильном формате, но я не понимаю ошибку, так как в этой части кода не упоминается идентификатор (я делал подобное в другом месте в моем проекте, и он работал нормально)

class Results(db.Model):
    id = db.Column(db.Integer, primary_key=True, autoincrement=True)
    correct = db.Column(db.Integer, primary_key=False)
    incorrect = db.Column(db.Integer, primary_key=False)

    def __repr__(self):
        return 'Result ' + str(self.id)


@app.route('/answers', methods=['GET', 'POST'])
def answers():
    correct = Results.correct
    incorrect = Results.incorrect
    if request.method == 'POST':
        submitted_answer = request.form['answer']
        if submitted_answer == Question.option1:
            correct = int(0)
            incorrect = int(0)
            correct += int(1)
            new_result = Results(correct=correct, incorrect=incorrect)
            db.session.add(new_result)
            db.session.commit()
        else:
            correct = int(0)
            incorrect = 0
            incorrect += int(1)
            new_result = Results(correct=correct, incorrect=incorrect)
            db.session.add(new_result)
            db.session.commit()
        return redirect('/answers')
    all_questions = Question.query.order_by().all()
    all_results = Results.query.order_by().all()
    return render_template('answers.html', questions=all_questions, all_results=all_results)

Вот рассматриваемый код, извините, если больно свидетельствовать, я новичок в этом и не полностью уверен во всех лучших практиках, спасибо

полное приложение, связанное ниже

https://github.com/turdies/FlaskQuiz

1 Ответ

0 голосов
/ 04 февраля 2020

если вы хотите указать поле как обнуляемое, вы должны сделать следующее

class Results(db.Model):
    id = db.Column(db.Integer, primary_key=True, autoincrement=True)
    correct = db.Column(db.Integer, nullable=True)
    incorrect = db.Column(db.Integer,  nullable=True)
......
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...