2017-01-03 67 views
0

所以我有一組JSON文件,並希望使用sqlalchemy將它們導入到我的sqlite數據庫。使用sqlalchemy將JSON數據導入到SQL python

,我想的方法是:

  1. 聲明一個類中的蟒蛇與所有的變量名:

    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. 閱讀JSON(使用python JSON封套中儲存一個由一個)

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

但是,如果我的JSON文件非常大,那麼聲明類中的所有變量看起來非常麻煩並且難以維護,因爲我打算進一步擴展JSON文件。

想知道有沒有更好的辦法來做到這一點

+0

您的意思是說您希望隨着時間的推移添加和/或刪除變量嗎?或者只是展開數據集?如果你只是擴大數據集,宣佈所有的變量不應該是一個大問題。如果您計劃添加或刪除,您可能會考慮使用文檔存儲(如Mongo)而不是RDBMS。 –

回答

1

的SQLAlchemy提供除了你已經證明了聲明接口mapping接口。使用它可以以編程方式添加列。

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

謝謝!這似乎是一個好主意! –