Pandas DataFrame.to_sql() 函数是不是需要后续的 commit()?
Posted
技术标签:
【中文标题】Pandas DataFrame.to_sql() 函数是不是需要后续的 commit()?【英文标题】:Does the Pandas DataFrame.to_sql() function require a subsequent commit()?Pandas DataFrame.to_sql() 函数是否需要后续的 commit()? 【发布时间】:2018-05-24 07:37:40 【问题描述】:可用于DataFrame
对象的Pandas 函数to_sql()
的文档(请参阅to_sql()
documentation)并未说明需要(或推荐)对连接进行commit()
调用以保持更新。
我可以安全地假设DataFrame.to_sql('table_name', con)
将始终自动提交更改(例如:con.commit()
)吗?
【问题讨论】:
【参考方案1】:是的,到最后会自动提交。
Pandas calls SQLAlchemy method executemany
(用于 SQL Alchemy 连接):
conn.executemany(self.insert_statement(), data_list)
for SQLite connection:
def run_transaction(self):
cur = self.con.cursor()
try:
yield cur
self.con.commit()
except:
self.con.rollback()
raise
finally:
cur.close()
由于最后SQL Alchemy docs executemany
问题commit
【讨论】:
Pandas 函数to_sql()
在未安装 SQLAlchemy 时也可以工作,在这种情况下它使用 sqlite
(如果我正确理解文档的话)。那么commit
是否也有保证?
我无法(明确地)发现 Pandas 中不推荐使用 SQLite 连接。对此有一些讨论(here 和 here),我的理解是 SQLite 连接(通过sqlite3
)仍然是受支持的功能(可能在“旧”标志下)。
@TomVerhoeff,是的,没错。对于误导性信息,我们深表歉意。我把它和deprecated flavor
in to_sql
代码行的链接不再适用,因为它们没有引用特定的 git 修订版,因此现在很难遵循。如果我们可以通过 sqlalchemy api 显式控制提交行为作为对此的回答,那就太好了。
我想我在 github.com/pandas-dev/pandas/blob/… 中没有看到明确的提交,这是 Pandas 为此调用的。似乎sqlite的python API不会自动提交if I'm looking in the right place。另一方面,对于 sqlite,您不能 create_engine(isolation_level="AUTOCOMMIT")
,所以我还不确定使用 sqlalchemy 的 sqlite 的默认提交行为是什么。以上是关于Pandas DataFrame.to_sql() 函数是不是需要后续的 commit()?的主要内容,如果未能解决你的问题,请参考以下文章
使用 pyODBC 的 fast_executemany 加速 pandas.DataFrame.to_sql
pandas DataFrame.to_sql 和 nan 值
Pandas DataFrame.to_sql() 错误 - 在字符串格式化期间并非所有参数都转换
pandas DataFrame.to_sql() 函数 if_exists 参数不起作用