如何通过 PYTHON 为 SQL INSERT FROM OPENJSON 转义 JSON 响应中的字符

Posted

技术标签:

【中文标题】如何通过 PYTHON 为 SQL INSERT FROM OPENJSON 转义 JSON 响应中的字符【英文标题】:How to escape characters in JSON response for SQL INSERT FROM OPENJSON via PYTHON 【发布时间】:2019-05-01 00:27:31 【问题描述】:

由于值 (') 中的撇号,向 SQL Server db 发送 API JSON 响应时出错。查看 operator_country_lar

的第二个 JSON 响应

这是一个示例 API 响应:

json_response= '
"num_results": 455161,
"results": [
    
        "activity_date": "1975-12-01",
        "activity_id": "50",
        "activity_name": "ORDERED",
        "operator_country_lar": "France",
        "registered_owner_name": "AIR FRANCE"
    ,
    
        "activity_date": "1974-10-01",
        "activity_id": "50",
        "activity_name": "ORDERED",
        "operator_country_lar": "Korea, Democratic People's Republic of",
        "registered_owner_name": "KOREAN AIR LINES"
    
],
"results_this_page": 2,
"status": 200'

序列化响应并执行:

query = "DECLARE @json nvarchar(max)= "+json_response+" INSERT INTO "+self.database+"([activity_date],[activity_name],[operator_name]) 
SELECT * FROM OPENJSON(@json, '$.results') WITH (activity_date date, activity_name nchar(25), operator_name nchar(256))"


cursor.execute(query)
cnxn.commit()

第一个实例工作正常,但响应中的第二个集合会引发错误。如何转义撇号或有更准确的方法在 PYTHON 中编写 SQL OPENJSON 语句?

【问题讨论】:

【参考方案1】:

此搜索和替换有效。它可能并不完美,但在处理 json 时相对较快。希望它可以帮助某人。

self.response = json.loads(json.dumps(self.response.json()).replace("'", ""))

如果您找到更好的解决方案,请在下面分享。

【讨论】:

以上是关于如何通过 PYTHON 为 SQL INSERT FROM OPENJSON 转义 JSON 响应中的字符的主要内容,如果未能解决你的问题,请参考以下文章

python 如何使用SQL Alchemy编译INSERT ... ON DUPLICATE KEY UPDATE并支持批量插入。

Python如何解析SQL语句并转换为Python对象,SQLParse类库的使用

SQL中 怎么将indentify_insert 设置为on?请高手们帮忙,急啊!!!。。。

如何从 Java 中的 Oracle SQL 选择中获取原始脚本输出而不是查询结果

SQL INSERT,参数为查询

python_如何通过twisted实现数据库异步插入?