从db获取文本作为django字典

时间:2012-06-07 08:28:44

标签: python django json

我最近加入了一家使用django来构建产品的公司。我目前负责其中一个应用程序,在我来之前已经开发了一些。

应用程序中的一个实体具有json字典属性,该属性已作为文本字段保存在db中。此外,此属性在模型中标记为文本字段。所以,你可以想象它没有被正确处理。

我想更改此内容并使用https://github.com/bradjasper/django-jsonfield将其设置为json字段,效果非常好。

但是,我遇到了一个特殊的问题。存储在数据库中的先前数据未正确处理,因为它是unicode数据,db中的文本字段如下所示:

{u'key': u'value'}

现在,当实体管理器尝试使用json字段加载这些值时,它当然会中断,因为它不再是有效的json字符串。

我已经做过一些关于如何克服这个问题的研究,但一无所获。

我的问题:

您对如何克服这个问题有任何建议吗?它可以是任何类型的解决方案。

  • 我可以运行一晚,改变那个字段,将其转换为有效的json字符串。
  • 对json-field代码进行了一些更改,使其能够正确处理这些值。

其他信息

我们使用postgrespsycopg2作为django的db后端。

非常感谢。

1 个答案:

答案 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()