11

こんにちは、データベースからテーブルを取得したいのですが、フィールド名を含めて、すべてのフィールド名を事前に知っているとは限らないパンダなどの列見出しから使用できるようにします

私のデータベースが次のように見える場合

table test1

 a | b | c 
---+---+---
 1 | 2 | 3
 1 | 2 | 3
 1 | 2 | 3
 1 | 2 | 3
 1 | 2 | 3

どうすればできますか

import psycopg2 as pq
cn = pq.connect('dbname=mydb user=me')
cr = cn.cursor()
cr.execute('SELECT * FROM test1;')
tmp = cr.fetchall()
tmp

tmp が示すように

[('a','b','c'),(1,2,3),(1,2,3),(1,2,3),(1,2,3),(1,2,3)]

ありがとう

4

5 に答える 5

15

必要なものが db テーブルのデータを値として持つデータフレームであり、データフレームの列名が db から読み込んだフィールド名である場合、これはあなたが望むことをするはずです:

import psycopg2 as pq
cn = pq.connect('dbname=mydb user=me')
cr = cn.cursor()
cr.execute('SELECT * FROM test1;')
tmp = cr.fetchall()

# Extract the column names
col_names = []
for elt in cr.description:
    col_names.append(elt[0])

# Create the dataframe, passing in the list of col_names extracted from the description
df = pd.DataFrame(tmp, columns=col_names)
于 2016-06-28T20:38:14.287 に答える
13

列名は 、 などとして利用できますcr.description[0][0]cr.description[1][0]表示されている形式とまったく同じにしたい場合は、それを抽出して結果セットの前に貼り付けるためにいくつかの作業を行う必要があります。

于 2013-06-18T03:05:48.777 に答える
7

少し見栄えがするようにマップすることもできます。

cursor.execute(open("blah.sql", "r").read())
data = cursor.fetchall()
cols = list(map(lambda x: x[0], cursor.description))
df = DataFrame(data, columns=cols)
于 2017-07-12T06:35:35.390 に答える