首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用sqlite和sqlite对pandas to_sql进行自动提交

使用sqlite和sqlite对pandas to_sql进行自动提交
EN

Stack Overflow用户
提问于 2019-09-30 00:41:29
回答 2查看 2.2K关注 0票数 0

在sqlite的情况下,还不清楚我们是否可以在每次数据帧插入后轻松地提交。(假设默认情况下关闭自动提交,遵循python数据库包装约定)。

使用最简单的sqlalchemy api流-

代码语言:javascript
运行
复制
db_engine = db.create_engine()
for .....
   # slowly compute some_df, takes a lot of time
   some_df.to_sql(con = db_engine)

我们如何确保每个.to_sql都被提交?

出于动机,想象一下特定的用例是这样的:每次写入都会反映潜在的非常长的计算结果,我们不想丢失大量这样的计算,也不希望丢失其中的任何一个,以防机器宕机,或者在python sqlalchemy引擎对象的所有写入在数据库中实际耗尽之前被垃圾收集。

我相信自动提交在默认情况下是关闭的,并且对于sqlite,没有办法在create_engine命令中更改它。在使用简单的.to_sql应用程序接口时,添加自动提交行为或在每次数据帧写入后显式提交的最简单、最安全的方法是什么?

或者必须重构代码以使用不同的api流来完成此操作?

EN

回答 2

Stack Overflow用户

发布于 2019-09-30 01:17:15

您可以通过以下方式set the connection到自动提交:

代码语言:javascript
运行
复制
db_engine = db_engine.execution_options(autocommit=True)
票数 2
EN

Stack Overflow用户

发布于 2019-09-30 01:33:14

来自https://docs.sqlalchemy.org/en/13/core/connections.html#understanding-autocommit

“自动提交”功能仅在未声明任何Transaction时有效。这意味着该特性通常不会与对象关系模型一起使用,因为默认情况下,Session对象总是维护一个正在进行的Transaction

在您的代码中,您没有提供任何显式事务,因此用作con引擎处于自动提交模式(由con实现)。

请注意,SQLAlchemy实现了自己的自动提交,该自动提交独立于DB-API驱动程序可能的自动提交/非事务性特性。

因此,你已经有了“最简单的,添加自动提交行为的最安全的方法-或者在每次数据帧写入后显式提交”,除非to_sql()发出一些古怪的语句,SQLA不会将其识别为数据更改操作,至少最近没有。

SQLA自动提交功能可能会在下一个主要版本中被淘汰,但我们将不得不等待和观察。

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

https://stackoverflow.com/questions/58157226

复制
相关文章

相似问题

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