【问题标题】:Dynamically Create Query String for Django > MySQL from JSON从 JSON 为 Django > MySQL 动态创建查询字符串
【发布时间】: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


【解决方案1】:

改为string,创建字典,然后直接传给mysqltable:

mysqltable(**dictWithData)

当然你可以将字符串重新解析到字典中,但这是无用的工作......

【讨论】:

  • 感谢您的回复。我在主线程上做出了回应,寻找一个很好的例子来说明你对扁平化嵌套 JSON 的建议。
  • 如何构造字符串?类似于st += "%s='%s';" % (jsonKey, jsonValue)。而是使用dictWithData[jsonKey]=jsonValue。这会将键/值对添加到字典中,而不是字符串中。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-10-28
  • 1970-01-01
  • 2015-04-19
  • 1970-01-01
  • 1970-01-01
  • 2021-12-05
相关资源
最近更新 更多