为什么不加入数据库呢?

时间:2016-12-08 09:42:02

标签: python html sql database flask

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)

没有任何表单响应被添加到数据库中。我不能为了 我的生活找出原因。有人可以帮忙吗?

3 个答案:

答案 0 :(得分:0)

您需要将更改提交到数据库。请参阅有关设置会话的文档中的this page。使用会话进行更改。然后它就像

一样简单
session.add(your_change)
session.commit()

不使用会话,您也可以尝试使用

db.execute('COMMIT')

但我建议设置会话。

答案 1 :(得分: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)

答案 2 :(得分:0)

db.execute(...)不会返回查询提取的行。 (实际上,根据PEP 249execute()的返回值是未定义的,并且可能因数据库/库的不同而不同。

要从SELECT查询中获取行,您应该迭代游标:

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

(您也可以使用fetchone()fetchall()以及光标的其他方法,但我发现通常最简单的方法是使用for ... in ...循环迭代光标)。