【问题标题】:What's the right definition of peewee model while mapping from json file?从 json 文件映射时,peewee 模型的正确定义是什么?
【发布时间】: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()——但不知道该怎么做。能否请您提供有关该方面的建议?

【问题讨论】:

    标签: json peewee


    【解决方案1】:

    关系数据库不支持“嵌套”。这是基础。任何嵌套的内容都应该在单独的表中或作为平面/标量值在其自己的列中。

    https://en.wikipedia.org/wiki/Database_normalization

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-03-02
      • 2023-03-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-11-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多