2017-01-03 2 views
0

Also ich habe eine Reihe von JSON-Dateien und möchte sie in meine SQLite-Datenbank mit Hilfe von sqlalchemy importieren.Importieren von JSON-Daten in SQL mit sqlalchemy python

Die Art und Weise, dass ich denke ich ist:

  1. eine Klasse in Python erklären mit allen Variablenname:

    class Designs(Base): 
        __tablename__='designs' 
        __table_args__ = {'sqlite_autoincrement': True} 
        design_name= Column(String(80),nullable=False,primary_key=True) 
        user_name= Column(String(80),nullable=False,primary_key=True) 
        rev_tag= Column(String(80),nullable=False,primary_key=True) 
    ...... much more variables..... 
    
  2. die JSON lesen (Python json-Paket mit und speichern Sie es ein von einem)

    import json 
    data = json.load(open('xxx.json')) 
    for key, value in data.iteritems(): 
        store it in the sql database 
    

Aber wenn meine JSON-Datei sehr groß ist, scheint die Deklaration aller Variablen in der Klasse sehr mühsam und schwer zu warten, da ich meine JSON-Datei weiter vergrößern möchte.

fragen sich, ob es einen besseren Weg, es zu tun

+0

Meinst du, dass Sie erwarten, im Laufe der Zeit Variablen hinzuzufügen und/oder zu entfernen? Oder erweitern Sie einfach den Datensatz? Wenn Sie nur den Datensatz erweitern, sollte die Deklaration aller Variablen keine große Sache sein. Wenn Sie Add oder Remove planen, sollten Sie einen Dokumentspeicher (wie Mongo) anstelle eines RDBMS verwenden. –

Antwort

1

sqlalchemy bietet eine mapping Schnittstelle zusätzlich zu der deklarative Schnittstelle, die Sie gezeigt haben. Mit ihr können Sie programmatisch Spalten hinzufügen.

metadata = MetaData() 

# This tuple of columns could be generated programmaticly 
columns = (
    Column('design_name', String(80), primary_key=True), 
    Column('user_name', String(80), nullable=False), 
    Column('rev_tag', String(80), nullable=False), 
    ... 
) 

designs = Table('designs', metadata, *columns) 

class Designs(object): 
    def __init__(self, json_data):  
     for key, value in data.iteritems(): 
     setattr(self, key, value) 

mapper(Designs, designs) 
+0

Danke! Das scheint eine gute Idee zu sein! –