我想將我創建的JSON文件轉換爲SQLite數據庫。在Python中將JSON轉換爲SQLite - 如何正確地將json鍵映射到數據庫列?
我的本意是後來決定哪些數據容器和切入點是最好的,JSON(通過文本編輯器數據輸入)或SQLite的(通過類似電子表格的圖形用戶界面的數據錄入像SQLiteStudio)。
我的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",
"medicoes": [
[32, 50],
[40, 50],
[29, 50],
[32, 50],
[35, 50]
]
},
"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",
"medicoes": [
[23, 30],
[32, 30],
[33, 30],
[32, 30]
]
}
...
而且我已經創建好的數據庫與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))''')
但問題是,當我正準備插入與像c.execute("insert into medicoes values(?,?,?,?,?,?,?)" % keys)
實際數據行,我意識到,因爲從JSON文件中加載的字典沒有特殊的命令,它沒有正確映射到數據庫的列順序。因此,我應該問:「我應該使用哪種策略/方法以編程方式讀取JSON文件中每個」塊「的鍵(本例中爲」local「,」coord「,」sentido「,」veiculos 「,」modalidade「,」政權「,」pistas「和」medicoes「),按照相同順序創建數據庫,然後插入具有適當值的行。
我有使用Python公平的經驗,但我只是用SQL開始,所以我想有關於一些好的做法輔導,而不一定是一個現成的配方。
我認爲你的回答包含了大部分的我想做。我唯一剩下的問題是'columns'是硬編碼的,我希望從文件中讀取字符串。最理想的是,它們應該是相同的順序。你怎麼看? – heltonbiker 2012-01-10 23:43:29
我用非硬編碼的列列表編輯了我的答案。 – srgerg 2012-01-11 00:01:54