首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >是否可以将数据暂存到内存选择,然后选择回滚或在sqlite3中提交?python 2.7

是否可以将数据暂存到内存选择,然后选择回滚或在sqlite3中提交?python 2.7
EN

Stack Overflow用户
提问于 2014-07-12 06:20:14
回答 3查看 82关注 0票数 1

我不确定如何最好地表达这个问题:

我想要更新、添加或删除SQLite3表中的信息,但我还不希望将此数据写入磁盘。我仍然希望能够选择数据,并获得更新后的信息,但随后我希望选择回滚或提交。

这个是可能的吗?SELECT将在更新之前还是之后获取数据?还是必须在下一条语句之前回滚或提交?

EN

回答 3

Stack Overflow用户

发布于 2014-07-12 06:31:59

根据您的标记,我假设您使用的是Python。这可能是特定数据库驱动程序的问题。尝试使用不使用Python DB API的数据库驱动程序,如apsw。另外,看看这篇文章:

Transactions with Python sqlite3

票数 1
EN

Stack Overflow用户

发布于 2014-07-30 02:38:26

(披露:我是apsw的作者)。SQLite (数据库而不是python包装器)完全支持您想要的东西,有多种方法可以实现它。

支持多个嵌套级别的事务。您可以使用savepoints,其中只有最外层的一个实际导致了磁盘提交。相同的连接将看到挂起的更改,而其他连接则看不到(称为isolation)。注意: pysqlite不知道保存点,可能会变得非常困惑,或者不能正确地与它们互操作。APSW运行得很好,你只需嵌套常规的with statements即可。

与这种方法不同,您可以创建temporary tables,然后在满意时将数据复制到持久性数据中。您也可以附加或使用类似的memory databases

最后,如果您希望多个连接看到挂起的数据,您可以将挂起的数据存储在不同的数据库文件中,并将其附加到每个连接中,根据需要将数据复制到主数据库中。

票数 1
EN

Stack Overflow用户

发布于 2014-07-12 06:52:37

如果您显式地需要在整个代码中多次提交,并且您担心事务的性能时间,那么您可以始终在内存db=sqlite3.connect(':memory:')中构建数据库,然后在程序的所有时间关键型方面完成后将其内容转储到磁盘。即脚本的末尾。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24707471

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档