Django - 我如何将“.json”文件插入 SQLite DB?

Posted

技术标签:

【中文标题】Django - 我如何将“.json”文件插入 SQLite DB?【英文标题】:Django - how can i insert '.json' file to SQLite DB? 【发布时间】:2021-11-01 10:31:05 【问题描述】:

我的“.json 文件”喜欢


  "users": [
    
      "userId": 1,
      "firstName": "AAAAA",
      "lastName": "as23",
      "phoneNumber": "123456",
      "emailAddress": "AAAAA@test.com",
      "homepage": "https://amogg.tistory.com/1"
    ,
    
      "userId": 2,
      "firstName": "BBBB",
      "lastName": "h5jdd",
      "phoneNumber": "123456",
      "homepage": "https://amogg.tistory.com/2"
    ,
    
      "userId": 3,
...

我正在谷歌上搜索,并尝试解决这个问题..但未解决。 所以我使用 pandas 和 sqlite3

import sqlite3 as db
import pandas as pd

df = pd.read_json('test.json')
con = db.connect('./test.db')

df.to_sql('test', con=con)

因此创建了数据库,但 .json 文件数据不保存在数据库中 如何解决这个问题...?

【问题讨论】:

【参考方案1】:

您必须事先创建表“test”,遍历 pandas 数据帧 df 并将记录一一插入到表中:

import sqlite3 as db
import pandas as pd

df = pd.read_json('test.json', orient='index')
con = db.connect('./test.db')
cursor = con.cursor()
cursor.execute('''create table test (userId int primary key,
                                     firstName text,
                                     lastName text,
                                     phoneNumber text,
                                     emailAddress text,
                                     homePage text)''')


for index, row in df.iterrows():
    for element in row.iteritems():
        try:
            firstName = element[1]['firstName']
        except:
            firstName = ''
        try:
            lastName = element[1]['lastName']
        except:
            lastName = ''
        try:
            phoneNumber = element[1]['phoneNumber']
        except:
            phoneNumber = ''
        try:
            emailAddress = element[1]['emailAddress']
        except:
            emailAddress = ''
        try:
            homepage = element[1]['homepage']
        except:
            homepage = ''

        cursor.execute("INSERT INTO test VALUES (?,?,?,?,?,?)", (element[1]['userId'],
                                                                 firstName,
                                                                 lastName,
                                                                 phoneNumber,
                                                                 emailAddress,
                                                                 homepage))

con.commit()
con.close()

由于并非所有记录的所有列都具有相同的有效值,因此您需要使用 try/except 验证列的存在,如果该列不存在于该行中,则存储一个空字符串。

【讨论】:

以上是关于Django - 我如何将“.json”文件插入 SQLite DB?的主要内容,如果未能解决你的问题,请参考以下文章

如何从views.py文件将数据插入django数据库?

如何将 JSON 文件导入 Django 数据库?

如何在 Django 中序列化(JSON)文件字段

如何使用 Django ORM 将 JSON 文件中的数据加载到 MySQL 实例中?

如何将json目录传递给django框架内的模板?

使用 Django Rest Framework,我如何上传文件并发送 JSON 有效负载?