Django的JSONField里面ArrayField
我有一个问题插入到使用ArrayField与JSONField里面的字段。
models.py
locations = ArrayField(JSONField(null = True,blank = True), blank=True, null = True)
插
location_arr = [{"locations" : "loc1","amount":Decimal(100.00)},{"locations" : "loc2","amount":Decimal(200.25)}] instance.locations = location_arr instance.save()
当我这样做,我得到了
列“位置”的types是jsonb [],但expression式的types是text []
LINE 1:… d“= 2517,”locations“= ARRAY ['{”loc …
提示:您将需要重写或转换expression式。
所以我试图转储它使用:
import json location_arr = [{"locations" : "loc1","amount":Decimal(100.00)},{"locations" : "loc2","amount":Decimal(200.25)}] instance.locations = json.dumps(location_arr) instance.save()
然后我得到了这个
LINE 1:… d“= 2517,”locations“='[{”loc“:…
详细信息:“[”必须引入显式指定的数组维度。
我在用:
- Django 1.9
- Python 2.7
- Postgres 9.4.10
- psycopg2 2.6.2
数组
首先,让我们仔细看一下Postgresql数组文档中的这个重要文本。
提示:数组不是集合; search特定的数组元素可能是数据库错误devise的标志。 考虑使用一个单独的表格,每行都是一个数组元素。 这将更容易search,并且可能对大量元素更好地扩展。
大多数情况下,你不应该使用数组。
JSONB
JSONB作为JSONFieldtypes在Django中可用。 这个字段比数组字段更具扩展性和灵活性,可以更有效地进行search。 但是,如果您发现自己一直在JSONB字段内search,那么关于Arrys的上述声明对于JSONB同样有效。
现在我们在你的系统中有什么? 一个包含JSONB字段的数组。 这是一个等待发生的灾难。 请规范化您的数据。
概括
那么何时使用ArrayField?
在罕见的情况下,当你不需要在那一列进行search时,你不需要使用该列来进行连接。