2017-08-28 65 views
0

我有一个超过2000个元素的Python列表。我有一个postgress表我需要查询这些元素的每一个,我目前使用以下。使用大型Python列表和Psycopg2以极快的速度查询Postgress表。

cur.execute("SELECT * FROM patent_info WHERE patentno = ANY (%s);", (list_of_patent,)) 

这样做是什么查询表一次一个列表中的每一个元素,我该数据存储在一个数据帧后使用

data = cur.fetchall() 

的问题是,有超过2000元的响应需要一段时间,有时会导致我的webapp超时或浏览器超时。

我正在寻找一种更快或更有效地查询表中所有元素的方法。

我想过对列表中的每个元素使用for循环,并使用cur.fetchone(),但我认为会更慢。

+0

尝试做WHERE专利号IN(<插入逗号分隔从列表中值>) –

+0

检查查询执行时间与数据集的传输时间,并张贴。 –

+0

@ClodoaldoNeto我如何检查这两个参数的时间? – Sheikebab

回答

0

做一个join相反在:

cursor.execute(""" 
    select * 
    from 
     patent_info 
     inner join 
     unnest(%s) u(patentno) using (patentno) 
""", (list_of_patent,)) 
+0

这大大缩短了查询时间,谢谢 – Sheikebab