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

2024-10-04 05:30:02 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个JSON文件,我从中读取数据并得到一个字典我希望这个完整的字典被插入到一个sqlserver数据库中,这样相同的字典就可以作为dictionary从数据库中读取。在

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

07/13/2018 11:25:00: ERROR: Exception 102:
Incorrect syntax near 'camera'.DB-Lib error

Msg 102, severity 15:
General SQL Server error: Check messages from the 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'}}}')

如何将这本词典插入数据库?在


Tags: 文件数据库jsonsqlmodeldictionary字典server
2条回答

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

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

要将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来规避该漏洞。参数还有助于确保您的输入作为正确的数据类型传递给您的数据库。

相关问题 更多 >