将字典插入使用Python中的JSON创建的SQL数据库中

时间:2018-07-13 06:05:20

标签: python sql-server pymssql

我有一个JSON文件,我从中读取数据并获得一个字典,我希望将此完整的字典插入SQL Server数据库中,以便可以从数据库中将其作为字典读取。

但是在插入相同的内容时,出现如下错误。

  

07/13/2018 11:25:00:错误:异常102:
  'camera'.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'}}}')

如何将此字典插入数据库?

2 个答案:

答案 0 :(得分:1)

要将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对象。

编辑

这里有两句话。

  1. prefipheralsInfo = open(peripheralsJsonFile).read()在读取后无法正确关闭文件,因此我使用了context manager来处理后台文件。

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

答案 1 :(得分:0)

由于它是MySql,因此您尝试将字段设置为TextField并将JSON转换为字符串并保存。检索时,您可以使用ast.literal_eval(fieldName)

如果您使用的是PostgreSql,则可以在模型中使用JSONField。