1

问候,通过使用 python 的 psycopg2 库,我目前可以连接到数据库并检索如下:

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

我怎样才能做到这一点?

4

2 回答 2

2

听起来像是一个可疑的设计。无论如何,IIRC,cursor.fetchall()返回一个列表,所以你可以做rows = qr.fetchall() + qr2.fetchall().

您必须自己处理重复项。如果您使用不同的模式,您可以这样做SELECT ... FROM schema1.foo ... UNION SELECT ... FROM schema2.foo

于 2009-12-23T10:12:25.610 回答
1

不是python专家,但有什么理由你不能这样做:

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 ....
于 2009-12-23T09:55:42.973 回答