【问题标题】:How to avoid data loss in python postgresql bulk insertion如何避免python postgresql批量插入中的数据丢失
【发布时间】:2015-04-22 13:56:15
【问题描述】:

我想将我的数据插入 PostgreSQL 1000 x 1000 记录(批量插入),以使其在 DBMS 上快速且低负载,所以我现在的代码是:

cursor.execute("INSERT INTO bar(first_name,last_name) VALUES ('David', 'Bar')")
cursor.execute("INSERT INTO bar(first_name,last_name) VALUES ('David2', 'Bar2')")
cursor.execute("INSERT INTO bar(first_name,last_name) VALUES ('David3', 'Bar3')")
.... etc
connection.commit()

正如您所看到的,我在最后提交了更改,这为我节省了很多时间,因为我在每次插入查询后都提交了更改。 问题是,如果任何查询因任何原因(无效数据)崩溃,所有查询都将无法执行,我将丢失数据。 有没有办法节省插入时间,同时避免数据丢失??

【问题讨论】:

标签: python postgresql bulkinsert


【解决方案1】:

这当然取决于您的要求,根据您的交易需求,我会推荐以下选项之一:

1。使用SAVEPOINT的(子事务):

BEGIN;
    SAVEPOINT savepoint;
    INSERT ...;
    RELEASE savepoint;
    SAVEPOINT savepoint;
    INSERT ...;
    /* If you're getting an error */
    ROLLBACK TO SAVEPOINT savepoint;
COMMIT;

2。使用AUTOCOMMIT

SET AUTOCOMMIT TO ON;
INSERT ...
INSERT ...
INSERT ...

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-23
    • 2021-08-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多