在Python中使用JSON创建的SQL数据库中插入字典
我有一个JSON文件,从中读取数据并获得一个字典。我希望将这个完整的字典插入到SQL Server数据库中,以便可以从数据库中作为字典读取 但在插入相同的代码时,我得到一个错误,如下所示 2018年7月13日11:25:00:错误:异常102:在Python中使用JSON创建的SQL数据库中插入字典,python,sql-server,pymssql,Python,Sql Server,Pymssql,我有一个JSON文件,从中读取数据并获得一个字典。我希望将这个完整的字典插入到SQL Server数据库中,以便可以从数据库中作为字典读取 但在插入相同的代码时,我得到一个错误,如下所示 2018年7月13日11:25:00:错误:异常102: “camera”附近的语法不正确。数据库库错误 消息102,严重性15: 常规SQL Server错误:检查来自SQL Server的消息 下面是我的INSERT查询 INSERT INTO hw_info (hostname, peripheralsI
“camera”附近的语法不正确。数据库库错误 消息102,严重性15:
常规SQL Server错误:检查来自SQL Server的消息 下面是我的
INSERT
查询
INSERT INTO hw_info (hostname, peripheralsInfo)
VALUES ('linux-host', '{u'camera': {u'ab': {u'model': u'Model1', u'version': u'Version1', u'selectorMask': u'Data1'}, u'cd': {u'model': u'Model2', u'version': u'Version2', u'selectorMask': u'Data2'}}}')
如何将此字典插入数据库?由于它是MySql,您可以尝试将字段设置为TextField,并将JSON转换为字符串并保存它。检索时,可以使用
ast.literal\u eval(fieldName)
如果您使用的是PostgreSql,则可以在模型中使用json字段。要将json插入数据库,请不要将其转换为Python对象;只需将字符串存储为从文件读取的字符串
with open(peripheralsJsonFile).read() as f:
peripheralsInfo = f.read()
myquery = """INSERT INTO hw_info(hostname, peripheralsInfo) VALUES(%s,%s)"""
cursor.execute(myquery, (hostname, peripheralsInfo))
当您希望稍后在程序中使用数据时,可以通过json.loads()
将SELECT查询中的字符串传递给Python对象
编辑
这里有两句话
prefipheralsInfo=open(peripheralsJsonFile).read()
在读取后无法正确关闭文件,因此我使用了一个在后台处理该文件的方法您需要用2替换sql中的
'
s,这样类似于'{u''camera'':{…
这个查询是如何构建的?使用参数?如果使用json.dumps(您的命令)
并将其作为参数传递到您的查询中,pymssql库应该为您执行所有必要的转义。@JamesZ但不是u
和”
不应该是数据库的一部分,json结构应该直接转储到数据库中。@shmee使用json文件(例如device.json)转储外围设备信息使用peripheralsInfo=json.loads(open(peripheralsJsonFile).read())
读取数据,查询准备为myquery=“”INSERT-INTO-hw_-info(主机名,外设信息)值('%s','%s')”“”%)(主机名,str(peripheralsInfo))
@darth\u coder是的,这意味着您从该文件的内容中获取dict。为了将其存储在表中,您需要对其进行序列化。或者,如果您只想拥有整个json结构,请省略json.loads()
并直接从文件中获取json字符串。啊,我看到了您的编辑。是的,只需执行peripheralsInfo=open(peripheralsJsonFile)。读取()
并将其传递给您的查询,而不使用str()
。为了稍后在代码中使用它,您可以从选择的结果中在该字段上使用json.loads()
。OP说的是MS SQL,而不是MySql。当您有一个json字符串时,为什么ast.literal\u eval
?json.loads()
在这种情况下更合适