2016-12-08 2 views
1
elif request.method == "POST": 
    post = request.form.get("question") 
    option_1 = request.form.get("option1rename") 
    option_2 = request.form.get("option2rename") 
    db.execute("INSERT INTO posts (question, option1, option2) VALUES(:post, 
     option1, :option2)", post=post, option1=option_1, option2 = option_2) 
    new_post = db.execute("SELECT id FROM posts WHERE question = :post", 
     post=post) 
    print(new_post) 

Ни один из ответов на формы не добавляется в базу данных. Я не могу за
жизнь меня выясняет почему. Может кто-нибудь помочь?Почему это не добавляется в базу данных?

+0

Это фляжка? если это так, вам нужно добавить фляжную бирку – ettanany

+0

да, это фляжка! – dfrankle

+2

вам необходимо совершить транзакцию :) – iScrE4m

ответ

0

Необходимо внести изменения в базу данных. См. this page из документации по настройке сеанса. Используйте сеанс, чтобы внести изменения. Тогда это так же просто, как

session.add(your_change) 
session.commit() 

без использования сеанса, вы можете также попробовать использовать

db.execute('COMMIT') 

, но я бы рекомендовал установить сеанс.

+0

Я вижу это: RuntimeError: (sqlite3.OperationalError) не может зафиксировать - никакая транзакция не активна [SQL: 'COMMIT'] И я читал где-то еще, что вам не нужно совершать на python? – dfrankle

+0

В Python потребуется фиксация. Проверьте эту страницу в документах о настройке сеанса. Это довольно легко, и этого должно быть достаточно, чтобы это было исправлено. – coralvanda

0

Вы используете SQLite, так что вы не имеют какой-либо объект сеанса, если ваши аргументы запроса и поле таблицы отлично execute() метод вставит в таблицу

elif request.method == "POST": 
    post = request.form.get("question") 
    option_1 = request.form.get("option1rename") 
    option_2 = request.form.get("option2rename") 
    db.execute(
     """INSERT INTO posts (question, option1, option2) VALUES(%s, 
      %s, %s)"""%(post, option_1, option_2)) 
    new_post = db.execute("SELECT id FROM posts WHERE question=%s", post) 
    print(new_post) 
+0

Я рад видеть, что мне не нужно совершать, потому что это первое, что я слышал об этом, но то, что вы предложили, не исправило. Я не уверен, что случилось, есть ли у вас какие-либо другие предложения? – dfrankle

+0

показать нам код ошибки и проверить ваши данные формы – metmirr

+0

Данные формы верны, ошибок нет - должно быть? – dfrankle

0

db.execute(...) не возвращает строки, получаемые в запросе. (Фактически, за PEP 249, возвращаемое значение execute() не определено и может отличаться от одной базы данных/библиотеки к другой).

Чтобы получить строки обратно из SELECT запроса, вы должны перебирать курсор:

cursor = db.cursor() 
cursor.execute("SELECT id, name FROM ...") 
for id, name in cursor: 
    print (id, name) 

(Вы можете также использовать fetchone(), fetchall() и другие методы курсора, но я считаю, что это, как правило, легче всего просто переместите курсор на петлю for ... in ...).

Смежные вопросы