2015-06-03 27 views
2

我正在使用Pyodbc來遍歷一個表格,將記錄作爲JSON返回併發送到服務器進行驗證。我能夠迭代並返回行,但是,服務器期望JSON採用以下格式。如何迭代我的結果並將{"MetaData": {}, "SRData":鍵附加到每個迭代結果/輸出?我的代碼如下。 所需的輸出:如何爲所有輸出字典分配一個JSON密鑰?

{ 
    "MetaData": {}, 
    "SRData": { 
     "SRNumber": "1-3580671" 
    } 
}, 
{ 
    "MetaData": {}, 
    "SRData": { 
     "SRNumber": "1-3580156" 
    } 
} 

代碼:

import pyodbc 
import json 
import requests 

    connstr = 'DRIVER={SQL Server};SERVER=server;DATABASE=ServiceRequest; UID=SA;PWD=pwd' 
    conn = pyodbc.connect(connstr) 
    cursor = conn.cursor() 

    cursor.execute("""SELECT SRNumber FROM ContainerFC""") 

    columns = [column[0] for column in cursor.description] 

    results = [] 
    for row in cursor.fetchall(): 
     results.append(dict(zip(columns, row))) 

    output = {"MetaData": {}, "SRData": results} 


    print(json.dumps(output, sort_keys=True, indent=4)) 

    objects_file = 'C:\Users\Administrator\Desktop\JSONOutput.txt' 
    f = open(objects_file,'w') 

    url = "url" 
    headers = {'Content-type': 'text/plain', 'Accept': '/'} 
    r = requests.post(url, data= json.dumps(output), headers=headers, verify=False) 

    print >> f 

    print 'It took', time.time()-start, 'seconds.' 


    conn.close() 

電流輸出:

{ 
    "MetaData": {}, 
    "SRData": [ 
     { 
      "SRNumber": "1-3140751" 
     }, 
     { 
      "SRNumber": "1-5574551" 
     } 
    ] 
} 

回答

0

也許這樣的事情?

import json 
import pyodbc 
cnxn = pyodbc.connect("DSN=myDb_SQLEXPRESS") 
cursor = cnxn.cursor() 
sql = """ 
SELECT '1-3580671' AS SRNumber, 'foo' AS thing 
UNION ALL 
SELECT '1-3580156' AS SRNumber, 'bar' AS thing 
""" 
cursor.execute(sql) 
columns = [column[0] for column in cursor.description] 

results = [] 
for row in cursor.fetchall(): 
    result = dict(zip(columns, row)) 
    results.append({"MetaData": {}, "SRData": result}) 

cnxn.close() 

print(json.dumps(results, sort_keys=True, indent=4)) 

返回

[ 
    { 
     "MetaData": {}, 
     "SRData": { 
      "SRNumber": "1-3580671", 
      "thing": "foo" 
     } 
    }, 
    { 
     "MetaData": {}, 
     "SRData": { 
      "SRNumber": "1-3580156", 
      "thing": "bar" 
     } 
    } 
] 
+0

這並獲得成功,感謝@Gord湯普森 – geoffreyGIS

相關問題