我有在表中,看起來像這樣的數據:格式Django的查詢集,以輸出值作爲數組
src_id, dst_id, params
int , int , array
我查詢數據從數組 用下面的Django查詢
提取一些值dataset = query_set.values_list('src_id', 'dst_id', *[e.field for e in settings])
我需要輸出的數據是這樣的:
[
[1,2,[a,b,c,d]],
[3,4,[a,c,d,e]],
...
]
但values_list
返回類似 (1,2,a,b,c,d)(3,4,a,c,d,e)...
元組的列表,所以我一直在做下面的元組值重新組合成一個數組:
[[d[0], d[1], d[2:]] for d in dataset]
它工作正常,但我有100萬+行,而且速度很慢。它也使用了大量的內存。理想情況下,我想在SQL中正確格式化數據(通過Django),並將輸出直接推送到JSON串行器,而不必生成中間數組。
有沒有一種方法來優化此代碼?
我看着使用循環或lambda,但這並沒有太大的區別。我看着使用array
,但它只需要原始類型,所以與陣列數組沒有太大的運氣。
我正在尋找一種方式來直接以正確的格式查詢數據庫和輸出的數據,如果可能的話在Django:
我看到Django的可以做切片陣列查找類似
dataset = query_set.values_list('src_id', 'dst_id', 'data__3_10')
以獲得索引3和10之間的值,但我需要檢索特定索引(例如1,4,5,6,8,11),而不是切片。
有關如何格式化查詢輸出的任何提示? 是可能的,或只是太深奧的Django? SQL是否需要raw
?
由於
格式化並不清楚數組中的字符串應該確實沒有引號,並且沒有字符串可以包含逗號或「]」。如果我知道,array(params)的個別元素可以在'.filter(data__3 = ...)'中用作查找,但不能在values_list中引用。你是如何實現的? – hynekcer
問題首先不清楚。現在我從你的回答中瞭解到[1,2,[a,b,c,d]]並不是一個格式化的輸出,而是一個嵌套對象的符號表示,其中「a,b,c, d「是任何相同類型的值。一切都最終由JSON風格形成,這不是任何示例的一部分,因爲問題是一般的。 (現在修正了一個錯字) – hynekcer