2013-06-18 51 views
0

我查詢使用psycopg2是混合列名與根據表中的值選擇

c.execute("select * from train_temp") 
trans=np.array(c.fetchall()) 

,坐落於預期的數據我有一行與列名的整個Postgres的表。

trans[-1,] 
Out[63]: 
array(['ACTION', 'RESOURCE', 'MGR_ID', 'ROLE_ROLLUP_1', 'ROLE_ROLLUP_2', 
     'ROLE_DEPTNAME', 'ROLE_TITLE', 'ROLE_FAMILY_DESC', 'ROLE_FAMILY', 
     'ROLE_CODE', None, None, None, None, None, None, None, None, None], dtype=object) 

更令人費解的是行數返回表中的

trans.shape 
Out[67]: (32770, 19) 



select count(1) from train_temp ; 
count 
------- 
32770 
(1 row) 

這裏匹配行的數量來是很表的

      Table "public.train_temp" 
     Column  |  Type  | Modifiers | Storage | Description 
---------------------+------------------+-----------+----------+------------- 
action    | text    |   | extended | 
resource   | text    |   | extended | 
mgr_id    | text    |   | extended | 
role_rollup_1  | text    |   | extended | 
role_rollup_2  | text    |   | extended | 
role_deptname  | text    |   | extended | 
role_title   | text    |   | extended | 
role_family_desc | text    |   | extended | 
role_family   | text    |   | extended | 
role_code   | text    |   | extended | 
av_role_code  | double precision |   | plain | 
av_role_family  | double precision |   | plain | 
av_role_family_desc | double precision |   | plain | 
av_role_title  | double precision |   | plain | 
av_role_deptname | double precision |   | plain | 
av_role_rollup_2 | double precision |   | plain | 
av_role_rollup_1 | double precision |   | plain | 
av_mgr_id   | double precision |   | plain | 
av_resource   | double precision |   | plain | 
Has OIDs: no 

這是怎麼回事架構?請注意,它不會發生在所有表格中。其實對於這最後一個過程中正常工作

Table "public.play" 
    Column |  Type  | Modifiers | Storage | Description 
-----------+------------------+-----------+----------+------------- 
row.names | text    |   | extended | 
action | double precision |   | plain | 
color  | text    |   | extended | 
type  | text    |   | extended | 
Has OIDs: no 

這最後一個表作爲字符串完全通過,而問題的一個尊重的數據類型。

play[1,] 
Out[73]: 
array(['2', '0.0', 'blue', 'car'], 
     dtype='|S5') 


trans[1,] 
Out[74]: 
array(['1', '0', '36', '117961', '118413', '119968', '118321', '117906', 
     '290919', '118322', 0.920412992041299, 0.942349726775956, 
     0.933439675174014, 0.920412992041299, 0.976, 0.964478764478764, 
     0.949222217031812, 0.909090909090909, 0.923076923076923], dtype=object) 

感謝您的見解。

+0

如果你已經解決了你的情況,不要把在的問題。將其張貼爲答案,然後將您的答案標記爲已接受。 – doppelgreener

回答

0

其實我只是在將* csv導入到postgres時自己寫了標題。

我應該用header選項psql這樣

\copy test from 'test.csv' with (delimiter ',' , format csv, header TRUE); 
相關問題