2016-05-03 20 views
0

JSONファイルをデータベースに保存しようとしています。私は非常に少しの経験を持っていますが、少し検索を実行した後、私はこのコードがJSiteをSQLiteに書き込む

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は、私は、データベースに、この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 
} 

のですか?

+0

問題が明らかである、Pythonはlanauguageを解釈なので、あなただけの文を一つずつ入力することができキーエラーが発生すると、dictが索引でインデックスできないためロードされるjsonが発生するため、レベル/深度にもかかわらず、名前または子でなければならない0がキーとしてカウントされます。または、 json/dictファイルにfooやbarはありません –

答えて

1

このコードでは、2つの列「foo」と「bar」を含む「table_name」という1つのテーブルを持つデータベースが作成されます。この構造は、保存しようとしているJSONファイルと一致しません。

保存しようとしているJSON構造をよりよく表すデータベーススキーマを作成するためにSQLクエリを変更する必要があります。

たとえば、以下のDDLで定義された3つの列、とテーブルを作成することができます。

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 
); 
関連する問題