Ваша проблема может быть связана с
1.) Проблемы с внешними ключами, на которые нет правильной ссылки
2.) Тройные одинарные кавычки в запросах sql
Позволяетначать с внешнего ключа
Это такие вещи, которые вам нужно знать.
Между Вопросами и тесты какая из таблицродители и какой из них является дочерним, поскольку вы не указали их.
A родительская таблица - это таблица, на которую следует ссылаться, в то время как дочерняя таблица - это таблица, составляющаяreference
Предположим, что таблица вопросов - это родитель, а таблица опросов - это дочерний элемент.
. Предположим, что таблица вопросов содержит столбец с именем question_id int
, а таблица опросов содержитстолбец question_id, который ссылается на question_id родительской таблицы (Вопросы)
Чтобы сделать вставку, Вы должны сначала вставить ее в родители (Вопросы), прежде чем вставить ее в ребенка (Викторины) из-за ссылки question_id.
всякий раз, когда вы пытаетесь вставить в таблицу опросов, он проверяет, существует ли этот вопрос_иде в родительской таблице, прежде чем разрешить вставку, в противном случае он не будет вставлен.
Это потому, что родители его имеютбудет давать ребенку.
Если, например, question_id таблицы родителей имеет значение 1
, то для вставки в викторины, являющиеся дочерними, question_id таблицы викторин должен иметьзначение, которое соответствует этому от родителей и в данном случае 1.
Сначала вы попытаетесь вставить непосредственно в sqlite и увидите, что вставка работает как для таблицы родителей (вопросы), так и для таблицы ребенка (тесты), прежде чем сказать, чтопроблема в коде вашей колбы.
решение 2
если внешний ключ не является вашей проблемой, тогда
Почему бы не использовать sql-alchemy , что просто и понятно.
Опять же. Почему вы используете тройные одинарные кавычки в запросах sql.часто предпочтительнее инициализировать параметр формы перед передачей его в sql-запросы
что-то вроде
yr = request.form['year']
tit = request.form['title']
cursor.execute("INSERT INTO quizzes (year, title) VALUES (?,?)", (yr,tit))
, так что вы можете попробовать это
def register_quiz():
try:
yr = request.form['year']
tit = request.form['title']
print("register_quizzes")
db=sqlite3.connect(dbname)
print(sqlite3.version)
db.row_factory = sqlite3.Row
cursor = db.cursor()
print("Title = " + request.form['title'])
cursor.execute("INSERT INTO quizzes (year, title) VALUES (?,?)", (yr,tit))
db.commit()
except Error as e:
print(e)
в качестве альтернативы.Я также переписал ваш код ниже, чтобы обеспечить работоспособность.просто измените соединение с БД, чтобы оно соответствовало вашему, и выполните настройку, где необходимо html
<html>
<body>
<form action = "{{ url_for('register_quiz') }}" method = "POST">
<fieldset id="field">
<legend>Quiz Storage</legend>
<tr>Title: <input type="text" name="title" id="title" placeholder="Title" value="{{request.form.title}}"></tr><br>
<p>Year: <select name="year" id="schoolyear" value="{{request.form.year}}">
<option value="1">7</option>
<option value="2">8</option>
<option value="3">9</option>
<option value="4">10</option>
<option value="5">11</option>
<option value="6">12</option>
<option value="7">13</option></select></p>
</form>
</body>
</html>
app.py
@app.route('/register_quiz',methods = ['POST', 'GET'])
def register_quiz():
if request.method == 'POST':
try:
yr = request.form['year']
tit = request.form['title']
with sql.connect("database.db") as con:
cur = con.cursor()
cur.execute("INSERT INTO quizzes (year, title)
VALUES (?,?)",(yr,tit) )
con.commit()
msg = "quiz successfully added"
except:
con.rollback()
msg = "error in insert operation"
finally:
#return render_template("result.html",msg = msg)
return 'success'
con.close()