【问题标题】:Can you use a context manager to write a pandas DataFrame to sqlite您可以使用上下文管理器将 pandas DataFrame 写入 sqlite
【发布时间】:2020-10-24 22:22:51
【问题描述】:

在将pandas DataFrame写入sql时,是否可以通过如下方式使用with语句?

import sqlite3
import pandas as pd

with sqlite3.connect('database.db') as conn:
    df = pd.read_sql("SELECT * FROM table", conn)
    
    # add change to db

    df.to_sql('table', conn, if_exists='replace', index=False)

【问题讨论】:

  • 好奇,你试过你的代码了吗?如果是这样,请发布错误或不希望的结果。
  • 代码正常工作,但我想知道这是否是在 python 中正确的方法。
  • 请看post。它回答了你的问题吗?

标签: python sql pandas


【解决方案1】:

来自documentation

连接对象可以用作自动提交或回滚事务的上下文管理器。如果发生异常,事务回滚;否则,事务被提交

示例:

import sqlite3
import pandas as pd

con = sqlite3.connect("database.db")

# Return the result as a list
with con:
    result = con.execute("SELECT * FROM table").fetchall()

# Pass as engine to pandas 
with con:
    df = pd.read_sql("SELECT * FROM table", con)

# Close connection
con.close()

编辑

正如@Parfait 正确地指出上下文管理器是由连接进行的事务,因此con 对象应该手动关闭。

【讨论】:

  • 谢谢 Miguel,当您使用上下文管理器时,连接不会自动关闭吗?如果 con.close() 部分被遗漏,我会遇到问题吗?
  • 理想情况下,@MiguelTrejo 应该已经链接了sqlite3 documentation。此处实现的上下文管理器不在连接对象上,而是在连接上进行的事务。最后你仍然需要con.close。请参阅文档中的示例。
猜你喜欢
  • 2020-08-21
  • 2017-01-29
  • 1970-01-01
  • 2013-05-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多