python - 将 JSON 写入 SQLite

标签 python json sqlite

我正在尝试将 JSON 文件保存到数据库中。我的经验很少,但经过一番搜索后,我发现了这段代码

import json
import sqlite3

JSON_FILE = "some.json"
DB_FILE = "some.db"

traffic = json.load(open(JSON_FILE))
conn = sqlite3.connect(DB_FILE)

foo = traffic[0]["foo"]
bar = traffic[0]["bar"]

data = [foo, bar]

c = conn.cursor()
c.execute('create table table_name (foo, bar)')
c.execute('insert into table_name values (?,?)', data)

conn.commit()
c.close()

但是,我遇到了错误 KeyError: 0

我正在测试的 JSON 是

{
   "name":"",
   "children":[
      {
         "name":"Level 1",
         "children":[
            {
               "name":"Level 2",
               "children":[
                  {
                     "name":"Level 3",
                     "children":[
                        {
                           "name":"Level 4",
                           "children":[
                              {
                                 "name":"Speed",
                                 "children":null,
                                 "id":6
                              }
                           ],
                           "id":5
                        }
                     ],
                     "id":4
                  }
               ],
               "id":3
            }
         ],
         "id":2
      },
      {
         "name":"Level 1",
         "children":[
            {
               "name":"Level 2",
               "children":[
                  {
                     "name":"Level 3",
                     "children":[
                        {
                           "name":"Level 4",
                           "children":[
                              {
                                 "name":"Cost",
                                 "children":null,
                                 "id":11
                              }
                           ],
                           "id":10
                        }
                     ],
                     "id":9
                  }
               ],
               "id":8
            }
         ],
         "id":7
      },
      {
         "name":"Level 1",
         "children":[
            {
               "name":"Level 2",
               "children":[
                  {
                     "name":"Level 3",
                     "children":[
                        {
                           "name":"Level 4",
                           "children":[
                              {
                                 "name":"Manufacturability",
                                 "children":null,
                                 "id":16
                              }
                           ],
                           "id":15
                        }
                     ],
                     "id":14
                  }
               ],
               "id":13
            }
         ],
         "id":12
      }
   ],
   "id":1
}

我到底如何将这个 JSON 或类似的 JSON 写入数据库?

最佳答案

您显示的代码创建一个数据库,其中包含一个名为“table_name”的表,其中包含两列“foo”和“bar”。此结构与您尝试存储的 JSON 文件不匹配。

您将需要更改 SQL 查询来创建一个数据库架构,以更好地表示您尝试存储的 JSON 结构。

例如,您可以创建一个包含三列的表,在下面的 DDL 中定义:

CREATE TABLE table_name (
    id     INTEGER PRIMARY KEY,
    name   VARCHAR,
    parent INTEGER
);

您的 JSON 是分层的,这会导致数据库设计出现一些问题。虽然自引用表是一个有争议的问题,但它们能够存储 JSON 并维护结构。

如果你想简单地将 JSON 字符串存储在数据库中,你可以这样做:

CREATE TABLE table_name (
    id              INTEGER PRIMARY KEY,
    json_contents   VARCHAR
);

关于python - 将 JSON 写入 SQLite,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37006857/

相关文章:

python - Nosetests 缺少命令行选项

ruby-on-rails - rails : Filter sensitive data in JSON parameter from logs

带有动态变量的 JSON(配置文件)

sql - GROUP_BY 内的 Active Record LIMIT

iphone - 这是一个框架或包装类,可简化在iPhone上使用sqlite3的工作吗?

python - 使用 psycopg2 将 Python 数组插入到 Postgres 查询中会导致类型错误

python - Cython 是否支持 C++11 容器?

json - Angular 2+ http get() JSON 数据。无法过滤数据

android - 为什么我在 this.getWritableDatabase(); 上出现空指针异常,android?

python - sqlalchemy 按 json 字段过滤