Привет, сообщество переполнения стека! Это мой первый вопрос, но я заранее пытался найти ответ. Прямо сейчас я работаю над загрузкой данных из json файла , например, (на самом деле у меня есть файл json с именем persons.json
, а не API) с использованием peewee
в SQLite DB. Как видите, файл json имеет несколько вложенных dicts. Моя модель peewee
выглядит следующим образом:
import json
import sqlite3
from peewee import *
db = SqliteDatabase('persons.sqlite3')
class Person(Model):
gender = CharField()
name = CharField()
location = CharField()
email = CharField()
login = CharField()
dob = CharField()
registered = CharField()
phone = CharField()
cell = CharField()
id_ = CharField()
picture = CharField()
nat = CharField()
count_dob = IntegerField()
И вот как я загружаю все данные из json файла в базу данных SQLite:
db.connect()
db.create_tables([Person])
with open('persons.json', encoding='utf8') as persons:
persons_data = json.load(persons)
for person in persons_data['results']:
p = Person(gender=person['gender'], name=person['name'], location=person['location'], email=person['email'],
login=person['login'], dob=person['dob'], registered=person['registered'], phone=person['phone'],
cell=person['cell'], id_=person['id'], picture=person['picture'], nat=person['nat'])
Мой вопрос: делать вы думаете, что переменные в моей модели определены правильно (в основном каждая из них как CharField)? Дело в том, что позже, когда я запрашиваю БД, и мне нужно получить доступ к некоторым из этих вложенных словарей, они на самом деле являются строкой, которую я могу преобразовать с использованием ast.literal_eval
обратно в dict, но я не думаю, что это выглядит отлично. Я подумал о решении - для всех переменных типа словаря в моей модели ('location', 'dob' et c) вместо использования CharField()
я, вероятно, мог бы использовать JSONField()
- не знаю, как это сделать что хотя. Не могли бы вы посоветовать по этому поводу?