2016-04-14 20 views
-3

私はDBから行を取り、行を繰り返し処理するスクリプトを書いています。PythonスクリプトでPostgreSQLの行をどのように処理するのですか?

私はどうなるのMySQLでは

import MySQLdb 
db_mysql=MySQLdb.Connect(user=...,passwd=...,db=..., host=...) 
cur = db_mysql.cursor(MySQLdb.cursors.DictCursor) 
cur.execute ("""SELECT X,Y,Z FROM tab_a""") 
for row in crs.fetchall() : 
    do things... 

しかし、私は、PostgreSQLでそれを行う方法がわかりません。 基本的に、この質問はPostgreSQLで動作するように上記のMySQLコードを翻訳する方法です。

これはこれまでのところ(私はPyGreSQLを使用しています)です。

import pg 
pos = pg.connect(dbname=...,user=...,passwd=...,host=..., port=...) 
pos.query("""SELECT X,Y,Z FROM tab_a""") 

このクエリ結果をどのように反復処理しますか?

+1

googleで2秒間検索すると、次のようになります。http://www.pygresql.org/contents/tutorial.html –

+0

plpgsqlドキュメントへのリンクが悪いのですが、そのDB-APIモジュールは何ですか?私が知っていることについて[psycopg](http://initd.org/psycopg/)は、例えばカーソルをうまくサポートします。 –

+0

私も 'psycopg'を使うことをお勧めします。とにかくこの 'pg'とは何ですか? –

答えて

1

q = db.query('select * from fruits') 
q.getresult() 

結果はタプルのPythonのリストであり、eardhタプルは行が含まれている、あなただけのリストを反復処理し、タプルを繰り返すか、インデックスする必要があります。

+0

ディクショナリに変更できますか?だから私は列のindxesではなく列の名前でアクセスできますか? – java

+0

@javaそれを以下に変更:q.dictresult() – Elad

0

私はそれは同じだと思う、あなたはいくつかのフェッチ呼び出し、ちょうどMySQLの中のように反復し、カーソルを作成する必要があります。

あなたが読むべき http://www.pygresql.org/contents/tutorial.html、より作成
import pgdb 
pos = pgdb.connect(database=...,user=...,password=...,host=..., port=...) 
sel = "select version() as x, current_timestamp as y, current_user as z" 
cursor = db_conn().cursor() 
cursor.execute(sel) 
columns_descr = cursor.description 
rows = cursor.fetchall() 
for row in rows: 
    x, y, z = row 
    print('variables:') 
    print('%s\t%s\t%s' % (x, y, z)) 
    print('\nrow:') 
    print(row) 
    print('\ncolumns:') 
    for i in range(len(columns_descr)): 
     print('-- %s (%s) --' % (columns_descr[i][0], columns_descr[i][1])) 
     print('%s' % (row[i])) 
    # this will work with PyGreSQL >= 5.0 
    print('\n testing named tuples') 
    print('%s\t%s\t%s' % (row.x, row.y, row.z)) 
+0

最初の行に 'AttributeError:cursor'と表示されます。 posは私が知ることから 'cursor()'を持っていません。 – java

+0

OK。古典的なpygres APIを使用します。 DB API 2.0インターフェイスを使用する方が良いと思います。これを行うには、 'pgdb'をインポートし、いくつかのパラメータの名前を' connect() 'に変更する必要があります。 –

+0

'row [0]'ではなく 'row ['x']'としてデータにアクセスできますか? (Dictonaryのように)。 MySQLで私はできる: 'connection.cursor(dictionary = True)'は、ここで何が同等であるか分からない。 – java

関連する問題