2009-12-23 8 views
0

Salutations, en utilisant la bibliothèque psycopg2 de python, je peux actuellement se connecter à un DB et récupérer tel comme ceci:Postgresql interroger deux bases de données différentes qui ont des mêmes tables nommées

conn = psycopg2.connect("dbname='db1' user='postgres' host='xxxxxx' password='mypass'"); 
qr = conn.cursor() 
qr.execute("SELECT avg(pavg) FROM mytable WHERE id =5") 

maintenant à côté de la base de données nommée " DB1" , je dois interroger une autre base de données d'une autre ip qui contient la même table, ajoutez les requêtes, à savoir

conn1 = psycopg2.connect("dbname='mydb' user='postgres' host='xxxxxx' password='mypass'"); 

conn2 = psycopg2.connect("dbname='mydb' user='postgres' host='yyyyyy' password='mypass'"); 

qr1 = conn1.cursor() 
qr1.execute("SELECT avg(pavg) FROM mytable WHERE id =5") 

qr2 = conn1.cursor() 
qr2.execute("SELECT avg(pavg) FROM mytable WHERE id =5") 

Comment puis-je y parvenir?

Répondre

2

Sons comme une conception douteuse. Quoi qu'il en soit, IIRC, cursor.fetchall() retourne une liste, de sorte que vous pouvez faire rows = qr.fetchall() + qr2.fetchall().

Vous devrez gérer vous-même les doublons. Si vous utilisiez différents schemas vous pouvez faire SELECT ... FROM schema1.foo ... UNION SELECT ... FROM schema2.foo.

1

pas un expert en python, mais est-il une raison quelconque vous ne pouvez pas faire:

conn2 = psycopg2.connect("dbname='db1' user='postgres' host='yyyyyy' password='mypass'"); 
qr2 = conn2.cursor() 
qr2.execute("SELECT avg(pavg) FROM mytable WHERE id =5") 

puis récupérer les résultats pour les objets qr de QND de QR2:

rows = qr .fetchall() 
for row in rows: 
    do you have to do .... 
and then 
rows = qr2 .fetchall() 
for row in rows: 
    do you have to do .... 
+0

en effet pas mais j'ai besoin de: rows = qr .fetchall() PLUS qr2 .fetchall() – Hellnar

Questions connexes