为啥不将其添加到数据库中?
Posted
技术标签:
【中文标题】为啥不将其添加到数据库中?【英文标题】:Why Isn't This Getting Added to the Database?为什么不将其添加到数据库中? 【发布时间】:2016-12-08 09:42:02 【问题描述】: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)
没有任何表单响应被添加到数据库中。我不能为 我的生活找出原因。有人可以帮忙吗?
【问题讨论】:
这是烧瓶吗?如果是这样,您需要添加flask标签 你需要提交你的交易:) 什么意思? AttributeError: 'SQL' 对象没有属性 'commit' 您忘记了option1
参数之前的:
。
【参考方案1】:
您需要将更改提交到数据库。请参阅有关设置会话的文档中的 this page。使用会话进行更改。那么就这么简单
session.add(your_change)
session.commit()
不使用会话,也可以尝试使用
db.execute('COMMIT')
但我建议设置会话。
【讨论】:
我看到这个:RuntimeError: (sqlite3.OperationalError) cannot commit - no transaction is active [SQL: 'COMMIT'] 我在其他地方读到你不需要在 python 上提交? 在 Python 中需要提交。查看文档中有关设置会话的页面。这很容易,应该足以解决这个问题。【参考方案2】:您正在使用 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)
【讨论】:
我很高兴看到我不需要提交,因为这是我第一次听说,但你的建议并没有解决它。不知道有什么问题,你还有什么建议吗? 表单数据正确,没有错误——应该有吗? 你可以尝试查询所有帖子SELECT * FROM posts
吗?
实际上,我看到了:RuntimeError: This text() 结构没有定义名为 'option1' 的绑定参数
你在做什么你得到RuntimeError?我很困惑【参考方案3】:
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 ...
循环迭代游标通常是最简单的)。
【讨论】:
以上是关于为啥不将其添加到数据库中?的主要内容,如果未能解决你的问题,请参考以下文章
为啥不将 FirebaseDatabase 引用中的所有数据都添加到 ArrayList<String> 中?