我有一个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'}}}')
如何将此字典插入数据库?
答案 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对象。
编辑
这里有两句话。
prefipheralsInfo = open(peripheralsJsonFile).read()
在读取后无法正确关闭文件,因此我使用了context manager来处理后台文件。
您可以使用Python的字符串插值来设置查询字符串的格式。这会使您的程序容易受到SQL injection attacks的攻击。在我的示例中,我利用parameterized query来规避该漏洞。参数还有助于确保将输入作为正确的数据类型传递到数据库。
答案 1 :(得分:0)
由于它是MySql,因此您尝试将字段设置为TextField并将JSON转换为字符串并保存。检索时,您可以使用ast.literal_eval(fieldName)
。
如果您使用的是PostgreSql,则可以在模型中使用JSONField。