2017-12-25 4 views
-1

내가 그래서 기본적으로 DB에 작업을 가져 않는파이썬 :

 Column  |   Type   | Modifiers 
----------------------+------------------------+----------- 
task_info   | character varying(100) | 
timestamp   | date     | 
task_count   | integer    | 

"info_tbl SELECT * FROM"을 사용하여 JSON 형식의 데이터 출력을 얻을 PostgreSQL의에서 테이블 info_tbl이 사용자 정의 형식으로 출력을 json.dumps json.dumps. 이 출력은 단지 이해를 위해 따라서 만 먼저 제시하는

[ 
    { 
    "task_info": "ABC", 
    "data_to_plot": [["2017-04-30", "993"],["2017-05-28", "624"],["2017-06-21", "811"]] 
    }, 
    { 
    "task_info": "PQR", 
    "data_to_plot": [["2017-05-31","413"],["2017-06-16", "773"],["2017-07-21", "941"],["2017-08-30", "493"]] 
    } 
] 

:

[ 
    { 
    "task_info": "ABC", 
    "timestamp": "2017-04-30", 
    "task_count": 993 
    }, 
    { 
    "task_info": "PQR", 
    "timestamp": "2017-05-31", 
    "task_count": 413 
    } 
] 

내가 실제로 달성하기 위해 무엇을 욕망하지만이 같은 것입니다 :하지만 밖으로 내가이 같은 것입니다 얻을 넣어 두 개의 레코드가 있고 실제 테이블에는 1000 개가 넘는 레코드가 있습니다. 도표를 그리기 위해 이들을 사용할 것입니다.

+0

당신이 형식 결과에 자신의 방법을해야 할 것 - 특히 당신이 데이터를 다른 조직 필요 - json.dumps''사용하지 않고. 또는 먼저 데이터를 다른 방식으로 구성해야합니다. 몇 가지 이유로 – furas

+0

, 다른 종속성뿐만 아니라 나는 데이터 형식 (테이블 구조)을 변경할 수 없습니다. 원하는 출력을 다시 일치시키기 위해 json.dumps 데이터 출력을 다시 포맷 할 수있는 방법이 있는지 알고 싶습니다. –

+0

너무 다른 결과가 예상됩니다 - 덤프를 너무 많이 다시 포맷 할 수는 없습니다. 데이터를 표시하려면 데이터를 재구성해야합니다. 일부 요소를 목록으로 그룹화해야합니다. 아마도'pandas '를 사용하면'groupby()'를 사용하여 데이터를 그룹화하는 것이 더 쉬울 것이다. – furas

답변

0

@furas가 덤프를 다시 형식화하는 데 실제로 좋지 않기 때문에 판다를 사용하여 다시 포맷을 수행하는 것이 옳았다는 것이 밝혀졌습니다. 나는 또한 HighCharts에 대한 입력으로 데이터를 준비하려고하는 사람들에게 유용 할 거라고 생각했습니다. 앞으로 판다를 사용하여 작업을 게시 할 예정입니다.

import psycopg2 
from psycopg2.extras import RealDictCursor 

con = psycopg2.connect("dbname='yourDBname' user='yourUserName' host='yourAddressOrLocalhost' password='yourPassword'") 
cur = con.cursor(cursor_factory=RealDictCursor) 

query = "select * from info_tbl" 
cur.execute(query) 

df = pd.DataFrame(cur.fetchall(),index=None) 
df['data_to_plot'] = df.apply(lambda row: [str(row['timestamp']) , row['task_count']], axis = 1) 

result = df.groupby('task_info')['data_to_plot'].apply(list).reset_index().to_json(orient='records') 
#result 
print(json.dumps(json.loads(result),indent=2)) 

출력 :

''' 
    [ 
     { 
     "task_info": "ABC", 
     "data_to_plot": [["2017-04-30", "993"],["2017-05-28", "624"],["2017-06-21", "811"]] 
     }, 
     { 
     "task_info": "PQR", 
     "data_to_plot": [["2017-05-31","413"],["2017-06-16", "773"],["2017-07-21", "941"],["2017-08-30", "493"]] 
     } 
    ] 
'''