2017-08-28 50 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