postgres批量操作高性能写法

本文介绍了在PostgreSQL中进行批量操作的三种方式,重点讲解了execute_values方法,它在性能上表现最优。execute_values允许通过游标、SQL查询、参数列表和分页大小来高效地执行批量更新或插入。示例代码展示了如何使用execute_values更新table_test表的数据。
摘要由CSDN通过智能技术生成

postgres批量操作高性能写法

一、背景

多次循环excute、execute_batch和execute_values为postgres三种批量操作方式,经调研,其中execute_values为性能最佳实践。

二、方法详解

execute_values(cur, sql, argslist, template=None, page_size=100, fetch=False)

使用具有一系列参数的VALUES执行语句。
cur:用于执行查询的光标。

sql:要执行的查询。它必须包含一个%s占位符,该占位符将被值列表替换。示例:“插入mytable(id,f1,f2)值%s”。

argslist:序列或字典序列,其中包含要发送给查询的参数。类型和内容必须与template一致。

template:要合并到argslist中的每个项目以构成查询的代码段。如果argslist项是序列,则它应该包含位置占位符(例如,(%s,%s,%s,%s)”,或“(%s,%s,42)”如果存在常量值…)。如果argslist项是映射,则它应该包含命名占位符(例如“(%id)s、%(f1)s、42)”。如果未指定,则假设参数是序列,并使用简单的位置模板(即(%s,%s,…)并使用argslist中第一个元素嗅探的占位符数量。

page_size:每个语句中包含的argslist项的最大数量。如果有更多项,函数将执行多个语句。

fetch:如果为True,则将查询结果返回到列表中(如在fetchall()中)。对于带有返回子句的查询有用。

三、代码示例
import psycopg2.extras

pg_conn = psycopg2.connect(database="postgres", user="postgres", password="xxxxxxx", host="10.255.xx.xxx", port="5432")
cursor = pg_conn.cursor()

values = [('ID_1', 15, '吉林省', '2000-10-01'), ('ID_2', 20, '北京市', '2010-03-01')]
psycopg2.extras.execute_values(
    cursor, sql="""update table_test set age=tmp.age,birth_place=tmp.birth_place,\
        birthday=tmp.birthday from (values %s) as tmp (id, age,birth_place,birthday) \
        where table_test.id= tmp.id""", argslist=values, page_size=1)
pg_conn.commit()


cursor.close()
pg_conn.close()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值