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

标签 python sql-server pymssql

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

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

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

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

最佳答案

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

关于python - 将字典插入到在 Python 中使用 JSON 创建的 SQL 数据库中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51318559/

相关文章:

python - 使用Numpy的readtxt读取十六进制数字

python - 在与 Python 2.7 中的元组中的单词相匹配的列表中总结成员元素的值

SQL 更新 SET 子查询?

sql-server - 如何在wix installer 3.9中从.bak文件(数据库备份)恢复数据库

python - 如何以有效的方式将具有 MultiIndex 的数据帧合并到另一个数据帧中?

python - 使用 WSGI、多个服务器部署 Web.py 应用程序

SQL 聚合使用 DISTINCT 对 ID 按最新日期

python - 为什么我可以使用 tsql 连接到 Azure MS SQL,但不能使用 pymssql?

python - 无法使用 pyodbc/pymssql 和 Robot Framework 连接到 SQL\Express

python - 标准输出 pymssql 到变量