我想将我创建的JSON文件转换为SQLite数据库。
我的json文件是这样的(包含我所在城市的一些十字路口的交通数据):
{
"2011-12-17 16:00": {
"local": "Av. Protásio Alves; esquina Ramiro Barcelos",
"coord": "-30.036916,-51.208093",
"sentido": "bairro-centro",
"veiculos": "automotores",
"modalidade": "semaforo 50-15",
"regime": "típico",
"pistas": "2+c"
},
"2011-12-19 08:38": {
"local": "R. Fernandes Vieira; esquina Protásio Alves",
"coord": "-30.035535,-51.211079",
"sentido": "único",
"veiculos": "automotores",
"modalidade": "semáforo 30-70",
"regime": "típico",
"pistas": "3"
}
}
字符串
我用下面几行Python代码创建了一个一对多关系的数据库:
import sqlite3
db = sqlite3.connect("fluxos.sqlite")
c = db.cursor()
c.execute('''create table medicoes
(timestamp text primary key,
local text,
coord text,
sentido text,
veiculos text,
modalidade text,
pistas text)''')
c.execute('''create table valores
(id integer primary key,
quantidade integer,
tempo integer,
foreign key (id) references medicoes(timestamp))''')
型
如何以编程方式从JSON文件中的每个“块”中读取键(在本例中,“local”,“coord”,“sentido”,“veiculos”,“modalidade”,“regime”,“pistas”和“medicoes”),以相同的顺序创建列数据库,然后插入具有正确值的行?
2条答案
按热度按时间z18hc3ub1#
你有这样的Python代码:
字符串
我觉得应该是
型
因为
%
运算符期望其左边的字符串包含格式化代码。现在,您需要做的就是让
keys
成为一个元组(或列表),其中包含medicoes表中新行的值,并按正确的顺序排列。考虑以下python代码:型
当我用你的样本数据运行这个程序时,我得到:
型
这似乎是你需要的元组。
您可以添加必要的sqlite代码,类似于:
型
**编辑:**如果你不想硬编码列列表,你可以这样做:
型
当我运行它时,它会打印:
型
你可以用它来做这样的事情:
型
当我尝试使用示例数据时,此代码打印的查询如下所示:
型
qgzx9mmu2#
使用流行的数据操作库
pandas
,将json转换为SQLite表非常容易,因为很多处理都是由pandas完成的。基本上,json文件可以使用pandas.read_json
转换为pandas DataFrame,然后我们可以简单地过滤所需的列并使用to_sql
转储到SQLite表中。字符串
但是,如果你不想坚持使用内置库,那么你可以预先处理数据,并使用
executemany
让sqlite3处理循环,而不是显式地打开/关闭连接并逐个插入每行:型