如何在网站中使用json数据,我应该使用哪种数据库?

时间:2019-02-25 05:27:11

标签: python json database web

我正在尝试创建一个网站,访客可以在该网站上单击美国地图上的一个州,并向他们提供有关给定年份在所选州选举中竞选的候选人的统计信息和信息。 我已经有一张图片地图,我将添加一个以年份和地区为参数的javascript函数。

我正在尝试在Django和Google App Engine中执行此操作,而我主要在Python中进行编码。

我已经在.json文件中收集了数据,以为我可以在Python中执行类似于open("path.json", "r")的操作并解析数据。

但是我不确定要怎么做或者是否有可能做这种事情。当我进行一些谷歌搜索时,我开始怀疑是否需要使用数据库。我应该使用数据库吗?如果需要,应该使用RDB还是NoSQL?另外,我应该如何将json中的数据提供给数据库。

我的json文件看起来像这样:

{
  "AL": {
    "api_version": "1.0",
    "pagination": {
      "count": 7,
      "pages": 1,
      "per_page": 100,
      "page": 1
    },
    "results": [
      {
        "party": "REP",
        "last_f2_date": "2015-12-09",
        "election_districts": [
          "00"
        ],
        "load_date": "2018-02-17T09:16:20+00:00",
        "party_full": "REPUBLICAN PARTY",
        "first_file_date": "2015-12-09",
        "office": "S",
        "incumbent_challenge": "C",
        "district_number": 0,
        "office_full": "Senate",
        "candidate_status": "N",
        "active_through": 2016,
        "candidate_id": "S6AL00336",
        "state": "AL",
        "election_years": [
          2016
        ],
        "federal_funds_flag": false,
        "incumbent_challenge_full": "Challenger",
        "flags": "S6AL00336",
        "district": "00",
        "cycles": [
          2016,
          2018
        ],
        "last_file_date": "2015-12-09",
        "has_raised_funds": true,
        "name": "BOWMAN, MARCUS",
        "operating_expenditure": 770.0,
        "primary_votes": "[19707]",
        "primary_sahre": "[0.0253026573760578]",
        "general_votes": "[' ']",
        "general_sahre": "[' ']"
      },
      {
        "party": "DEM",
        "last_f2_date": "2015-04-03",
        "election_districts": [
          "00"
        ],
        "load_date": "2018-02-17T09:16:20+00:00",
        "party_full": "DEMOCRATIC PARTY",
        "first_file_date": "2015-04-03",
        "office": "S",
        "incumbent_challenge": "C",
        "district_number": 0,
        "office_full": "Senate",
        "candidate_status": "P",
        "active_through": 2016,
        "candidate_id": "S6AL00302",
        "state": "AL",
        "election_years": [
          2016
        ],
        "federal_funds_flag": false,
        "incumbent_challenge_full": "Challenger",
        "flags": "S6AL00302",
        "district": "00",
        "cycles": [
          2016,
          2018,
          2020
        ],
        "last_file_date": "2015-04-03",
        "has_raised_funds": true,
        "name": "CRUMPTON, RONALD (RON) STEVEN",
        "operating_expenditure": 33668.0,
        "primary_votes": "[153897]",
        "primary_sahre": "[0.560802119355885]",
        "general_votes": "[748709.0]",
        "general_sahre": "[0.358672615888139]"
      },

2 个答案:

答案 0 :(得分:0)

我建议构建一个数据库,因为我发现为它编写代码更容易,尤其是在您的数据不断变化的情况下。如果不是,那仍然是一个好主意,因为您可以从数据库中提取数据并通过python上传数据(示例:PostgreSQL的psycopg2)。

此外,每次选举时您的数据都会增长,然后会添加更多数据,从而使JSON文件扩展,并且如果引入任何统计信息,则需要编写特定的代码来读取此类文件。与数据库相比,您可以添加一个新字段(现在可能不存在)并为所有条目提供默认值,而不必将新值复制到JSON文件中的每个条目。此外,由于Django的框架,查询数据得以简化。

最后,我将从PostgreSQL开始,因为它是免费的,并且具有与之交互的GUI界面,以帮助您更好地理解SQL。

希望这会有所帮助。

答案 1 :(得分:0)

您声称自己是使用Django Web Framework用Python进行编码的。

Django是一个专门为数据库交互设计的Web框架(如果可能的话,不使用它就没有意义)。 Django仅支持关系数据库(RDB),并且仅支持以下关系数据库:

Django本身不正式支持NoSQL数据库。但是,有许多支持Django的NoSQL功能的辅助项目和分支,例如Django non-rel-Django Docs

在Python中,解析JSON格式的字符串很容易:

https://docs.python.org/3/library/json.html

如何处理结果完全取决于您自己,以及如何使其最适合您的网站的常规设计和后端实现。您甚至可以将JSON直接存储在专用数据库字段中:

https://docs.djangoproject.com/en/2.2/ref/contrib/postgres/fields/#django.contrib.postgres.fields.JSONField