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 :(得分: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 249,execute()
的返回值是未定义的,并且可能因数据库/库的不同而不同。
要从SELECT
查询中获取行,您应该迭代游标:
cursor = db.cursor()
cursor.execute("SELECT id, name FROM ...")
for id, name in cursor:
print (id, name)
(您也可以使用fetchone()
,fetchall()
以及光标的其他方法,但我发现通常最简单的方法是使用for ... in ...
循环迭代光标)。