【问题标题】:Is it possible to use Django ORM with JSON object?是否可以将 Django ORM 与 JSON 对象一起使用?
【发布时间】:2022-12-07 22:56:24
【问题描述】:

我有两个 json 对象,我需要它们来执行各种 ORM 操作,例如 countfilterall

这是第一个对象 cmets:

在 views.py 中

 comments_response = requests.get('https://jsonplaceholder.typicode.com/comments')
 comments_data = json.loads(comments_response.text)

所以下面是 print(comments_data) 的样子:

 [
      {
        "userId": 1,
        "id": 1,
        "title": "sunt aut facere repellat provident occaecati excepturi optio reprehenderit",
        "body": "quia et suscipit\nsuscipit recusandae consequuntur expedita et cum\nreprehenderit molestiae ut ut quas totam\nnostrum rerum est autem sunt rem eveniet architecto"
      },
      {
        "userId": 1,
        "id": 2,
        "title": "qui est esse",
        "body": "est rerum tempore vitae\nsequi sint nihil reprehenderit dolor beatae ea dolores neque\nfugiat blanditiis voluptate porro vel nihil molestiae ut reiciendis\nqui aperiam non debitis possimus qui neque nisi nulla"
      },
      
    ]

这是第二个 json 对象: 在 views.py 中

posts_response = requests.get(
    'https://jsonplaceholder.typicode.com/posts')
posts_data = json.loads(posts_response.text) 

所以下面是 print(posts_data) 的样子:

[
  {
    "postId": 1,
    "id": 1,
    "name": "id labore ex et quam laborum",
    "email": "Eliseo@gardner.biz",
    "body": "laudantium enim quasi est quidem magnam voluptate ipsam eos\ntempora quo necessitatibus\ndolor quam autem quasi\nreiciendis et nam sapiente accusantium"
  },
  {
    "postId": 1,
    "id": 2,
    "name": "quo vero reiciendis velit similique earum",
    "email": "Jayne_Kuhic@sydney.com",
    "body": "est natus enim nihil est dolore omnis voluptatem numquam\net omnis occaecati quod ullam at\nvoluptatem error expedita pariatur\nnihil sint nostrum voluptatem reiciendis et"
  },
]

是否可以对 json 对象使用 django ORM?例如comments_data.objects.count('title')comments_posts.objects.all()。 DRF 的序列化程序是否可以协助进行此类操作?我是否需要使用任何其他框架来将 json 转换为支持 ORM 的对象?

注意:我确实搜索了相关的主题/问题,但他们中的大多数人都有来自他们自己的内部数据库的 JSON 数据,他们可以完全访问这些数据(这意味着他们已经可以从一开始就做 ORM)。就我而言,我只是从外部 API 接收到 json 对象,它不是来自我的内部数据库或我有权访问的任何数据库。

我看到的一些问题但没有回答我的问题:

1.https://stackoverflow.com/questions/66223066/django-getting-values-from-postgres-json-field

2.https://stackoverflow.com/questions/10445176/how-to-write-a-query-to-get-find-value-in-a-json-field-in-django

3.https://stackoverflow.com/questions/36389871/django-jsonfield-filtering

【问题讨论】:

    标签: python json django orm django-orm


    【解决方案1】:

    你有几个选择。

    1. 将数据加载到与 json 匹配的模型中(如果每条记录都一致)。
    2. 将数据加载到 Django 模型的 JSON 字段中。
    3. 只需使用理解来过滤您的口述。

      对于 (3),一旦将 JSON 加载到 python 字典列表中,就可以对其进行操作。

      所以:

      • 统计记录:len(comments_data)
      • 所有记录:comments_data
      • 过滤记录:[item for item in comments_data if item["email"] == "Eliseo@gardner.biz"]

      等等

      基本上,没有必要在这里尝试和复制 ORM 的东西。

      有几个选项可以将数据加载到 Django 模型中:

      在最基本的层面上,如果你有一个匹配 json 记录的模型,你可以创建一个实例然后保存它。例如。

      # You have the model
      
      class TestModel(models.Model): 
          field_one = CharField(...)
          field_two = IntegerField(...)
      
      # And the JSON: 
      
      json_data = {
          "field_one": "This is the first rec",
          "field_two": 1,
      }
      
      # You can create an instance of the model class and save it
      
      instance = TestModel(**json_data)
      instance.save()
      

      有关将 json 转换为 django 模型以及反之的更多信息,我建议您阅读序列化程序。

    【讨论】:

    • 当然有很多用例,尽管我刚才提到的是最简单的一个。例如,如果两个 json 对象有关系,则很难理解进行内部连接和计数。
    • 我回答了你给出的案例,而不是另一个案例。如果您想开始加入 JSON,请将其加载到适当的模型中。
    • 你会建议怎么做吗?我正在处理很多 JSON,我知道最简单的处理方法是对其进行 ORM。
    • 如果你想在数据上使用 django orm,你需要将它加载到模型中。
    • 您介意分享如何将其“加载”到模型中的细节吗?使用理解?使用库?也许您可以将其添加到您的答案中。
    猜你喜欢
    • 1970-01-01
    • 2013-09-03
    • 2020-12-22
    • 1970-01-01
    • 2020-06-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-13
    相关资源
    最近更新 更多