check which ids exists postgrestable(检查哪些ID已过账)
本文介绍了检查哪些ID已过账的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
检查PostgreSQL表中存在哪些ID的速度如何
我写了以下函数,但当len(x)
大于500 000时,它会非常慢
import psycopg2
conn = psycopg2.connect(...)
cursor = conn.cursor(cursor_factory=psycopg2.extras.DictCursor)
def check_exist(lst):
exist = []
not_exist = []
for i in lst:
cursor.execute(f"SELECT * FROM table1 where id={i}")
row = cursor.fetchone()
if row:
exist.append(i)
else:
not_exist.append(i)
return exist, not_exist
x, y = check_exist(['2','4','3000','50000','10000000'])
推荐答案
您可以使用ANY,让postgres完成大部分工作:
import psycopg2, time
# database is in a datacenter just using a tunnel!
conn = psycopg2.connect("dbname=mf port=5959 host=localhost user=mf_usr")
cur = conn.cursor()
ids = [x for x in range(0, 750000)]
sql = """
SELECT array_agg(id) from __users where id = ANY(%s);
"""
# array_agg: Postgres returns an array of ids!
_start = time.time()
cur.execute(sql, (ids, ))
existingIds = cur.fetchone()[0]
missingIds = set(ids) - set(existingIds)
print(len(existingIds))
print(len(missingIds))
print('Took: %.6f seconds' % (time.time() - _start))
输出:
284365
465635
Took: 5.564851 seconds
注意:确保ID列上有索引
这篇关于检查哪些ID已过账的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
沃梦达教程
本文标题为:检查哪些ID已过账


基础教程推荐
猜你喜欢
- PermissionError: pip 从 8.1.1 升级到 8.1.2 2022-01-01
- 求两个直方图的卷积 2022-01-01
- 包装空间模型 2022-01-01
- PANDA VALUE_COUNTS包含GROUP BY之前的所有值 2022-01-01
- 在同一图形上绘制Bokeh的烛台和音量条 2022-01-01
- 在Python中从Azure BLOB存储中读取文件 2022-01-01
- 修改列表中的数据帧不起作用 2022-01-01
- 无法导入 Pytorch [WinError 126] 找不到指定的模块 2022-01-01
- Plotly:如何设置绘图图形的样式,使其不显示缺失日期的间隙? 2022-01-01
- 使用大型矩阵时禁止 Pycharm 输出中的自动换行符 2022-01-01