我最近加入了一家使用django来构建产品的公司。我目前负责其中一个应用程序,在我来之前已经开发了一些。
应用程序中的一个实体具有json字典属性,该属性已作为文本字段保存在db中。此外,此属性在模型中标记为文本字段。所以,你可以想象它没有被正确处理。
我想更改此内容并使用https://github.com/bradjasper/django-jsonfield将其设置为json字段,效果非常好。
但是,我遇到了一个特殊的问题。存储在数据库中的先前数据未正确处理,因为它是unicode数据,db中的文本字段如下所示:
{u'key': u'value'}
现在,当实体管理器尝试使用json字段加载这些值时,它当然会中断,因为它不再是有效的json字符串。
我已经做过一些关于如何克服这个问题的研究,但一无所获。
我的问题:
您对如何克服这个问题有任何建议吗?它可以是任何类型的解决方案。
其他信息
我们使用postgres
和psycopg2
作为django的db后端。
非常感谢。
答案 0 :(得分:2)
您可能只需要迭代整个表,加载字段,将其转换为真正的Python字典,然后使用json.dumps
将其转储回来。 ast.literal_eval
是转化阶段的不错选择,因为它的工作方式与内置eval
相似,但受限制较多,因此系统风险较小。
for obj in MyModel.objects.all():
value = ast.literal_eval(obj.dict_value)
obj.dict_value = json.dumps(value)
value.save()