如何避免python postgresql批量插入中的数据丢失

时间:2015-04-22 13:56:16

标签: python postgresql bulkinsert

我想通过1000条记录(批量插入)将我的数据插入到PostgreSQL 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()

正如你可以看到我在最后提交了更改,这为我在每次插入查询后提交更改提供了大量时间。 问题是如果任何查询由于任何原因(无效数据)崩溃,所有quires将无法执行,我将丢失数据。 反正有没有节省插入时间,同时避免数据丢失?

1 个答案:

答案 0 :(得分:0)

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

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 ...