2012-07-13 110 views
2

Sqlalchemy結果可以有0到多個記錄。如何將Sqlalchemy結果返回爲JSON?

結果是:

record = meta.Session.query(model.EmpsTable).filter(model.EmpsTable 
     .firstname.like(searchQuery)) 

如果只有一條記錄返回,我會做:

return {'file_id':record.file_id, 'filename': 
     record.filename, 'links_to' :record.url} 

我可以在終端打印的記錄,像這樣的:

for r in record: 
    print r.file_id 

但在這種情況下,我需要將這些多條記錄作爲JSON回覆給JQuery ajax。

我該如何做到這一點?

回答

2

第一件事,不要叫record一個對象是一個查詢,集合,儀表序列/任何......然後你可以得到一個字典列表。

qry = meta.Session.query(model.EmpsTable).filter(model.EmpsTable 
     .firstname.like(searchQuery)) 

return {'data': [ 
     {'file_id':record.file_id, 'filename': 
      record.filename, 'links_to' :record.url} 
     for record in qry 
     ]} 

要將返回的對象轉換爲JSON,您可能已經爲此裝飾了方法,或者只需調用json.dumps()就可以了。

更新:出於安全原因,如指出by @MrGhimire最好是將該列表包裝在字典中。

+0

難道說,但現在我得到這樣的警告: 「WARNI [pylons.decorators] [工人1]陣列信封JSON的反應很容易受到跨站數據泄露攻擊」 – 2012-07-13 10:46:26

+2

@MrGhimire:入住這裏爲什麼它是一個安全問題:http://flask.pocoo.org/docs/security/#json-security – mouad 2012-07-13 10:48:56

+0

@mouad謝謝,這使問題變得清晰。 你知道任何安全的選擇嗎(不一定使用JSON)? – 2012-07-13 10:58:39