我想用asyncpg插入多行并获取i,我找到了两种方法: 1:像这样生成sql
INSERT INTO films (code, title, did, date_prod, kind) VALUES
('B6717', 'Tampopo', 110, '1985-02-10', 'Comedy'),
('HG120', 'The Dinner Game', 140, DEFAULT, 'Comedy')
RETURNING id;
2:在for循环中使用预准备语句
values =(('B6717', 'Tampopo', 110, '1985-02-10', 'Comedy'),
('HG120', 'The Dinner Game', 140, DEFAULT, 'Comedy'))
stmnt = connection.prepare("INSERT INTO films (code, title, did, date_prod, kind) VALUES $1, $2, $3, $4, $5 RETURNING id")
for val in values:
stmnt.fetchval(*val)
在100x倍的情况下,我必须选择哪种方法来处理70万行数据,或者有一些方法可以组合这些方法?我完全是菜鸟,所以给我扔点西红柿
发布于 2017-05-04 18:15:19
asyncpg
提供了executemany
方法来插入许多行。
statement = """INSERT INTO films (code,
title,
did,
date_prod,
kind) VALUES($1, $2, $3, $4, $5);"""
await connection.executemany(statement, values)
如果需要使用稍后提到的RETURNING
来返回插入的ids,则可以使用此answer。
发布于 2019-04-19 03:00:36
一次插入多行的另一种方法(假设不需要插入的is )是使用copy_records_to_table
方法。
data = [
("row", 1, "some data"),
("row", 2, "more data"),
]
await conn.copy_records_to_table('mytable', records=data)
https://stackoverflow.com/questions/43739123
复制相似问题