2

クエリは複数の結果を返すため、Get_results クラスで、クエリの結果を反復処理するために data_out を配列として返すにはどうすればよいですか?

import psycopg2
import sys

class Get_results():
    def db_call(self,query,dbHost,dbName,dbUser,dbPass):
        try:
            con = None
            con = psycopg2.connect(host=dbHost, database=dbName,
                                   user=dbUser, password=dbPass)
            cur = con.cursor()
            cur.execute(query)
            data = cur.fetchall()
            for data_out in data:
                return data_out
        except psycopg2.DatabaseError, e:
                print 'Error %s' % e
                sys.exit(1)
        finally:
            if con:
                con.close()

 sql = " some sql "
 w = Get_results()
 for i in  w.db_call(sql, dbHost, dbName, dbUser, dbPass):
     print "The result is : " + i

追加情報については、結果が得られたprint data直後に 追加した場合:data = cur.fetchall()

[('The_Galaxy', 'The_Galaxy:star'),
 ('The_Galaxy', 'The_Galaxy:planet')]
4

2 に答える 2

4

直接の答えは変更することです:

for data_out in data:
    data_out result

に:

for data_out in data:
    yield data_out

ただし、withステートメントを使用して(DB APIがサポートしている場合)、コードを単純化することを検討する必要があります。これは、ジェネレーター関数を作成することで実行できます(この場合、クラスはOTTです)。

于 2012-10-15T17:15:04.970 に答える
3
import psycopg2
import sys

class Get_results():
    def db_call(self,query,dbHost,dbName,dbUser,dbPass):
        try:
            con = None
            con = psycopg2.connect(host=dbHost, database=dbName,
                                   user=dbUser, password=dbPass)
            cur = con.cursor()
            cur.execute(query)
            data = cur.fetchall()  
            resultList = []  
            for data_out in data:  
                resultList.append(data_out[1])  


            return resultList   
        except psycopg2.DatabaseError, e:
                print 'Error %s' % e
                sys.exit(1)
        finally:
            if con:
                con.close()

 sql = " some sql "
 w = Get_results()
 for i in  w.db_call(sql, dbHost, dbName, dbUser, dbPass):
     print "The result is : " + i
于 2012-10-15T17:19:38.313 に答える