Python sqlite3 保存数据

Posted

技术标签:

【中文标题】Python sqlite3 保存数据【英文标题】:Python sqlite3 saving data 【发布时间】:2015-08-23 08:25:14 【问题描述】:

有谁知道我该如何纠正这个问题,因为这段代码没有将数据保存在数据库中?

def save():

    #FUNCTIONS

    def savenow():
        params = [i.get(), n.get(), p.get(), r.get(), t.get(), a.get(), "None", "None"]

        if not os.path.exists("C:/Users/Dhruv/DS"):
            os.makedirs("C:/Users/Dhruv/DS/")

        connect = sqlite3.connect("C:/Users/Dhruv/DS/data.db")
        connect.execute("""CREATE TABLE IF NOT EXISTS FD 
                        (ID TEXT NOT NULL,
                         NAME TEXT NOT NULL,
                         P INT NOT NULL,
                         R INT,
                         T INT,
                         A INT NOT NULL,
                         D1 DATE,
                         D2 DATE);""")

        tobeexec = "INSERT INTO FD(ID, NAME, P, R, T, A, D1, D2) VALUES(?, ?, ?, ?, ?, ?, ?, ?)"

        connect.execute(tobeexec, params);

        connect.close()

我只想将数据写入数据库,但是当我试图检索它时,它显示数据库是空的...... 无论如何提前谢谢...

【问题讨论】:

在关闭连接之前尝试:connect.commit() 【参考方案1】:

你需要commit the transaction。

connect.execute(tobeexec, params);
connect.commit()
connect.close()

【讨论】:

【参考方案2】:

除了最佳答案之外,还可以考虑将 Connection 对象用作上下文管理器,它很有用,它在SQLite3 API 中提供:

connect = sqlite3.connect("C:/Users/Dhruv/DS/data.db")
try:
    with connect:
        connect.execute(...)  # Your SQL statement
except Exception as err:
    # Do what you want with the Exception

如果您在with connect 中的语句没有引发错误,则事务将自动提交。如果出现问题,事务将回滚。

(另一个答案可能是在加载数据库后将 isolation_level 设置为 None,这意味着 autocommit 模式)

【讨论】:

其实connect.commit()好多了。 我不想不必要地争论什么是最佳答案(知道我的答案只是对第一个/最佳答案的补充),但我很好奇(真的!),关于哪个事实 你认为connect.commit() 比经理上下文“好多了”?或者你有一个例子吗?根据文档,使用上下文管理器with 只是在没有遇到错误时自动调用connect.commit()connect.rollback() 否则自动调用的便捷方式。

以上是关于Python sqlite3 保存数据的主要内容,如果未能解决你的问题,请参考以下文章

谁能帮我如何在 sqlite3 数据库中保存图像?

如何将日期+时间保存和检索到 sqlite3 数据库中?

Scrapy通过sqlite3保存数据

在列表框/python中保存颜色更改

sqlite3 中用于按月检索数据的查询是啥

让 Python 更加充分的使用 Sqlite3