栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

在Python中将JSON转换为SQLite-如何将JSON键正确映射到数据库列?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

在Python中将JSON转换为SQLite-如何将JSON键正确映射到数据库列?

您有以下python代码:

c.execute("insert into medicoes values(?,?,?,?,?,?,?)" % keys)

我认为应该是

c.execute("insert into medicoes values (?,?,?,?,?,?,?)", keys)

因为

%
操作员希望字符串左边的字符串包含格式代码。

现在,只需要做

keys
一个元组(或列表),即可按正确的顺序包含medicoes表新行的值。考虑以下python代码:

import jsontraffic = json.load(open('xxx.json'))columns = ['local', 'coord', 'sentido', 'veiculos', 'modalidade', 'pistas']for timestamp, data in traffic.iteritems():    keys = (timestamp,) + tuple(data[c] for c in columns)    print str(keys)

当我使用您的样本数据运行此命令时,我得到:

(u'2011-12-19 08:38', u'R. Fernandes Vieira; esquina Protxe1sio Alves', u'-30.035535,-51.211079', u'xfanico', u'automotores', u'semxe1foro 30-70', u'3')(u'2011-12-17 16:00', u'Av. Protxe1sio Alves; esquina Ramiro Barcelos', u'-30.036916,-51.208093', u'bairro-centro', u'automotores', u'semaforo 50-15', u'2+c')

这似乎是您需要的元组。

您可以使用以下内容添加必要的sqlite代码:

import jsonimport sqlite3traffic = json.load(open('xxx.json'))db = sqlite3.connect("fluxos.sqlite")query = "insert into medicoes values (?,?,?,?,?,?,?)"columns = ['local', 'coord', 'sentido', 'veiculos', 'modalidade', 'pistas']for timestamp, data in traffic.iteritems():    keys = (timestamp,) + tuple(data[c] for c in columns)    c = db.cursor()    c.execute(query, keys)    c.close()

编辑: 如果您不想对列列表进行硬编码,则可以执行以下操作:

import jsontraffic = json.load(open('xxx.json'))someitem = traffic.itervalues().next()columns = list(someitem.keys())print columns

当我运行它时,它会打印:

[u'medicoes', u'veiculos', u'coord', u'modalidade', u'sentido', u'local', u'pistas', u'regime']

您可以将其与以下内容一起使用:

import jsonimport sqlite3db = sqlite3.connect('fluxos.sqlite')traffic = json.load(open('xxx.json'))someitem = traffic.itervalues().next()columns = list(someitem.keys())columns.remove('medicoes')columns.remove('regime')query = "insert into medicoes (timestamp,{0}) values (?{1})"query = query.format(",".join(columns), ",?" * len(columns))print queryfor timestamp, data in traffic.iteritems():    keys = (timestamp,) + tuple(data[c] for c in columns)    c = db.cursor()    c.execute(query)    c.close()

当我尝试使用您的示例数据时,此代码将打印查询,如下所示:

insert into medicoes (timestamp,veiculos,coord,modalidade,sentido,local,pistas) values (?,?,?,?,?,?,?)


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/437136.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号