【发布时间】:2017-05-05 05:26:17
【问题描述】:
我在 PostgreSQL 9.5 数据库表中有大约 1,500,000 条记录,并且我得到了一个 CSV 文件(通过 http post 请求),其中包含新的约 1,500,000 行,其中一些未更改,一些不同,还有一些已删除与原始行相比。
然后
- 截断旧表
- 循环遍历 CSV 文件的行
- 将每一行插入表格中
我需要一种方法来做到这一点, 不会向我的客户引入服务中断,即服务应该继续使用旧数据,直到完成所有三个步骤。目前,服务中断时间约为 1 小时,这是读取 CSV 并插入所有新行所需的时间。如果需要,我可以休息 5 分钟。
我怎样才能实现这样的行为?
这是我的 Python 脚本的缩短版本:
cursor = conn.cursor(cursor_factory=DictCursor)
cursor.execute('TRUNCATE TABLE rows CASCADE')
with open(request.files.csv) as csv_file:
for line in csv_file:
row = parse_line(line)
cursor.execute(
'''INSERT INTO rows (name, bla, blu)
VALUES (%(name)s, %(bla)s, %(blu)s)''',
row,
)
cursor.commit()
【问题讨论】:
标签: python sql postgresql psycopg2