【发布时间】:2020-08-05 08:13:50
【问题描述】:
你好堆栈溢出社区!这是我在这里的第一个问题,但我试图事先找到答案。现在我正在使用peewee将数据从json文件like so(我实际上有一个名为persons.json,而不是API的json文件)加载到SQLite DB。如您所见,json 文件有多个嵌套的字典。我的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 的方式:
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,但我不认为它看起来好的。我想到了一个解决方案——对于我模型中的所有“字典类型”变量(“位置”、“dob”等),而不是使用CharField(),我可能会使用JSONField()——但不知道该怎么做。能否请您提供有关该方面的建议?
【问题讨论】: