Postgresql запрашивает две разные базы данных с одинаковыми именными таблицами - PullRequest
0 голосов
/ 23 декабря 2009

Привет, используя библиотеку psycopg2 из python, я могу подключиться к БД и получить следующее:

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

Теперь, кроме базы данных с именем "db1", мне нужно запросить другую базу данных с другого ip, который содержит ту же таблицу, добавить запросы, т.е.

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")

Как мне этого добиться?

Ответы [ 2 ]

2 голосов
/ 23 декабря 2009

Звучит как сомнительный дизайн. В любом случае, IIRC, cursor.fetchall() возвращает список, поэтому вы можете сделать rows = qr.fetchall() + qr2.fetchall().

Вам придется самостоятельно обрабатывать дубликаты. Если бы вы использовали разные схемы , вы могли бы сделать SELECT ... FROM schema1.foo ... UNION SELECT ... FROM schema2.foo.

1 голос
/ 23 декабря 2009

не эксперт по питону, но есть ли причина, по которой вы не можете:

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

затем извлекаем результаты для объектов qr qnd 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 ....
...