【发布时间】:2020-02-18 08:21:11
【问题描述】:
我正在尝试使用 Psycopg2's copy_expert() 将 CSV 文件列表复制到 Postgres。
我打开光标分别为每个文件执行复制命令,并在复制数据后关闭它。 但是,如果我在此过程中遇到任何文件错误,我将回滚事务。
如果出现错误,我不确定在复制 CSV 文件之前打开的光标会发生什么。
在连接完成回滚后会自动关闭还是保持原样?
我已经检查了 psycopg2 http://initd.org/psycopg/docs/connection.html#connection.rollback 上的回滚文档。但是,我仍然不确定尚未关闭的光标会发生什么,因为他们没有在文档中提到与光标相关的任何内容。
try:
for tablename, filename in self.mapping:
cur = self.conn.cursor()
filename = f"{self.to_db}{wid}-{filename}"
filename = f"{os.path.join(self.directory, filename)}.csv"
sql = f"copy {tablename} from stdin with delimiter as ',' csv header;"
with open(f"{filename}", 'r') as file:
cur.copy_expert(sql, file)
cur.close()
self.conn.commit()
except Exception as e:
self.conn.rollback()
return e
【问题讨论】:
标签: python database postgresql cursor psycopg2