首页 > 解决方案 > 将字典插入使用 Python 中的 JSON 创建的 SQL 数据库

问题描述

我有一个 JSON 文件,我从中读取数据并获取字典我希望将这个完整的字典插入到 SQL Server 数据库中,以便可以从数据库中读取相同的字典。

但是在插入相同的内容时,我收到如下错误。

2018 年 7 月 13 日 11:25:00:错误:异常 102:
“相机”附近的语法不正确。DB-Lib 错误

消息 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'}}}')

如何将这个字典插入到数据库中?

标签: pythonsql-serverpymssql

解决方案


要将 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))

当您以后想要在程序中使用数据时,您可以将 SELECT 查询中的字符串传递json.loads()给它,使其成为 Python 对象。

编辑

这里有两点说明。

  1. prefipheralsInfo = open(peripheralsJsonFile).read()阅读后没有正确关闭文件,因此我使用了一个上下文管理器来处理幕后的问题。

  2. 您可以使用 Python 的字符串插值来格式化查询字符串。这使您的程序容易受到SQL 注入攻击。在我的示例中,我使用参数化查询来规避该漏洞。参数还有助于确保您的输入作为正确的数据类型传递给您的数据库。


推荐阅读