2016-10-06 3 views
0

В эти дни я изучаю SQLAlchemy. Когда я хочу загрузить объект из json и сохранить его в MySQL, все становится сложно, потому что поля в моей модели больше 20, и мне интересно, есть ли лучшие способы сделать это.Лучший способ конвертировать json в объект SQLAlchemy

Мой исходный код следует в качестве примера:

class User(Base): 
    __tablename__ = 'parent' 
    id = Column(Integer, primary_key=True) 
    name = Column(String) 

json_str = """{"id": 1, "name": "yetship"}""" 
obj = json.loads(json_str) 
user = User(id=obj.get("id"), name=obj.get("name")) 

Он может работать, но, как я могу добавить больше полей, оно становится ужасно.

+0

Почему бы не использовать базу данных, которая изначально поддерживает JSon документы? –

+0

это только свалка и функция загрузки, не нужно для этого и использовать nosql dbs ... – Liqiang

ответ

5

Если у вас есть в вашем json-файле только поля, которые вы можете инициализировать User. Тогда вы просто можете это сделать.

user = User(**obj) 

**obj будет распаковать dict объект, поэтому, если есть obj = {'id': 1, 'name': 'Awesome'}, User(**obj) будет делать, как User(id=1, name='Awesome')

Вы можете увидеть the docs

Примечание: лучше избегать использования id в качестве переменной | поле, поскольку 'id' in dir(__builtin__), поэтому id in bultins

UPD

Если у вас в JSon полях, которые не принадлежат к этой модели вы можете фильтровать их с Dict пониманием

user = User(**{k:v for k, v in obj.items() if k in {'id', 'name'}}) 
+0

Я делаю глупо здесь и задаю плохой вопрос, спасибо, что напомнили .. – Liqiang

Смежные вопросы