【发布时间】:2019-09-22 12:03:39
【问题描述】:
我正在尝试将 json 文件中的数据插入 python 中的 sqlite 数据库。
json文件格式为:
{
"metadata": {
"start_at": "2016-01-27 20:01:14",
"end_at": "2016-08-23 20:01:14",
"act_count": 1
},
"act_data": [{
"performed_at": "2013-04-24 20:01:14",
"ticket_id": 531,
"performer_type": "user",
"performer_id": 7687,
"activity": {
"shipping_address": "N/A",
"priority": 3,
"agent_id": 8505,
"requester": 12559
}
}, {
"performed_at": "2012-03-14 20:01:14.340099",
"ticket_id": 235,
"performer_type": "user",
"performer_id": 11829,
"activity": {
"note": {
"id": 22257,
"type": 1
}
}
}]
}
我想将所有列插入同一个表中。我已经在 sqlite 数据库中创建了一个表。
我想为具有“note”键和其他为“ticket”的项目填充一个附加列“activity_type”作为“Note”。我运行了以下代码:
import json
import sqlite3
with open("tickets1.json") as data_file:
data = json.load(data_file)
conn = sqlite3.connect('tickets.db')
c = conn.cursor()
c.execute(""" CREATE TABLE activitydata1(
performed_at VARCHAR(50) NOT NULL,
ticket_id INTEGER NOT NULL,
performed_type VARCHAR(10) NOT NULL ,
performer_id INTEGER NOT NULL,
acitivity_type VARCHAR(10) NOT NULL,
note_id INTEGER NULL,
note_type INTEGER NULL,
shipping_address NVARCHAR(50) NULL,
shipment_date NVARCHAR(50) NULL,
category VARCHAR(10) NULL,
contacted_customer VARCHAR(10) NULL,
issue_type VARCHAR(10) NULL,
source INTEGER NULL,
status VARCHAR(10) NULL,
priority INTEGER NULL,
groups VARCHAR(10) NULL,
agent_id INTEGER NULL,
requester INTEGER NULL,
product VARCHAR(10) NULL)
""")
for record in data["act_data"]:
for key,val in record["activity"].items():
if ( key == 'note'):
activity_type="note"
c.execute("INSERT INTO activitydata1(performed_at, ticket_id,performed_type,performer_id,acitivity_type,note_id,note_type) VALUES (?,?,?,?,?,?,?)",(record["performed_at"], record["ticket_id"],record["performer_type"],record["performer_id"],activity_type,val["id"],val["type"]))
else:
activity_type="ticket"
c.execute("INSERT INTO activitydata1(performed_at, ticket_id,performed_type,performer_id,acitivity_type,shipping_address,priority,agent_id,requester) VALUES (?,?,?,?,?,?,?,?,?)",(record["performed_at"], record["ticket_id"],record["performer_type"],record["performer_id"],activity_type,record["activity"]["shipping_address"],record["activity"]["priority"],record["activity"]["agent_id"],record["activity"]["requester"]))
conn.commit()
conn.close()
此代码插入四行同一张票和一行便笺。 一共5行。 所需的输出只有两行 - 一行用于票据,另一行用于备注。
请找到所附数据库的图像。 请帮我更正代码。 请建议一些其他更好的方法来处理这个问题。 提前致谢。
【问题讨论】:
-
您能否包括您的表定义以及在该 json 中插入值后您希望结果行的样子?
-
@Shawn 我已经用数据库的表定义和图像更新了问题。感谢您的帮助。
标签: json python-3.x parsing sqlite insert