Python 作为django字典从db获取文本

Python 作为django字典从db获取文本,python,django,json,Python,Django,Json,我最近加入了一家使用django构建产品的公司。我目前负责其中一个应用程序,在我来这里之前已经开发了一点 应用程序中的一个实体具有json dictionary属性,该属性作为文本字段保存在数据库中。此外,此属性在模型中标记为文本字段。所以,正如你所想象的,它没有得到正确的处理 我想更改它,并使用将其设置为json字段,这非常有效 然而,我遇到了一个特殊的问题。数据库中存储的以前的数据未正确处理,因为它是unicode数据,所以数据库中的文本字段如下所示: {u'key': u'value'}

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

应用程序中的一个实体具有json dictionary属性,该属性作为文本字段保存在数据库中。此外,此属性在模型中标记为文本字段。所以,正如你所想象的,它没有得到正确的处理

我想更改它,并使用将其设置为json字段,这非常有效

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

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

我做了一些关于如何克服这个问题的研究,但什么也没有发现

我的问题:

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

  • 我可以在夜间运行的东西,改变该字段,将其转换为有效的json字符串
  • 对json字段代码进行一些更改,使其能够正确处理这些值
其他信息

我们使用
postgres
psycopg2
作为django的db后端


非常感谢。

您可能只需要迭代整个表,加载字段,将其转换为真正的Python dict,然后使用
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()