【发布时间】:2016-05-17 09:40:10
【问题描述】:
我是 Django 新手,在写入 MySQL dB 时遇到了一些问题。我要做的是遍历嵌套的 JSON 数据,并动态创建一个字符串以与 save() 方法一起使用。
我已经遍历了我的嵌套 JSON 数据,并成功创建了一个字符串,该字符串包含我想要在单行中保存到 MySQL 表“mysqltable”的数据:
q = "station_id='thisid',stall_id='thisstaull',source='source',target='test'"
然后我尝试将其保存到 MySQL 中的表中:
b = mysqltable(q)
b.save()
但我得到了错误:
TypeError: int() 参数必须是字符串或数字,而不是 'mysqltable'
我认为正在发生的事情是它不喜欢我创建了一个要在 b = mysqltable(q) 中使用的字符串这一事实。当我像下面这样写出声明时,它工作正常:
q = mysqltable(station_id='thisid',stall_id='thisstaull',source='source',target='test')
q.save()
但我不确定如何获取该字符串并使其可用于 b.save()。任何帮助将不胜感激!
【问题讨论】:
-
为什么将 JSON 数据转换为字符串?将其保留为 dict 会更有用,然后您可以使用
mysqltable(**data)将其直接传递给模型初始化。那个字符串格式是没用的。 -
感谢您的回复。我试图处理 JSON 中的嵌套,并且我知道 .save() 之前的语句是 mysqltable(variable1='value1",variable2='value2')。因此,通过循环创建该字符串很简单键:值对动态创建键:值对仅适用于 JSON 中存在的元素。我不想为 JSON 中不存在的元素将空值写入 dB。有没有你可以指出的答案我要扁平化嵌套的 JSON 以便简单地插入到表中?
-
我不太确定您在寻找什么。正如我和 Steel 都说过的,您可以直接传递带有当前属性的 dict。由于您显然已经在遍历嵌套的 dict 以为每个项目创建一个字符串,因此您可以只传递当前的子 dict。如果您仍然遇到问题,则需要发布完整的处理代码和嵌套 JSON 的示例。
-
谢谢丹尼尔和钢铁!我终于使用字典而不是创建字符串来完成这项工作。我通过将一个字典附加到另一个字典来处理嵌套(两者都是从原始 json.loads() 创建的)。然后我使用“del”从新字典中删除重复的嵌套 JSON 元素。我使用“.pop()”来更改一些与 dB 字段不同的 JSON 键的名称。再次感谢您的建议。
标签: python mysql json django django-queryset