2017-08-28 1 views
0

Ich habe eine Python-Liste von mehr als 2000 Elementen. Ich habe eine Postgreß-Tabelle, die ich für jedes dieser Elemente abfragen muss, ich verwende zurzeit das folgende.Abfrage einer Postgress-Tabelle mit einer großen Python-Liste und Psycopg2 mit Geschwindigkeit.

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

Was das bedeutet ist die Tabelle für jedes Element in der Liste zu einem Zeitpunkt einer Abfrage und i speichern diese Daten in einem Datenrahmen danach

data = cur.fetchall() 

Das Problem besteht darin, dass mit mehr als 2000 Elemente der Die Antwort dauert eine Weile, um zu verursachen, dass meine Webanwendung zeitüberschreitung oder der Browser eine Zeitüberschreitung verursacht.

Ich suchte nach einer Möglichkeit, alle Elemente aus der Tabelle schneller oder effizienter abzufragen.

ich dachte über die Verwendung einer for-Schleife für jedes Element in der Liste und die Verwendung von cur.fetchone(), aber ich nahm an, dass wäre langsamer.

+0

Versuchen zu tun, wo patentno IN (), um die Abfrageausführungszeit im Vergleich zu der Datensatz Übertragungszeit –

+0

überprüfen und veröffentlichen. –

+0

@ClodoaldoNETo Wie überprüfe ich die Zeit für diese beiden Parameter? – Sheikebab

Antwort

0

ein Do join in statt:

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

Dies hat die Abfragezeit drastisch reduziert, danke – Sheikebab

Verwandte Themen