sql-server - 无法使用 Python 字典作为列值执行 SQL 插入命令
问题描述
我在 Databricks 中使用 Pyspark,包括通过 SQL 命令将参数化值插入到 SQL Server 表中。
将参数插入 SQL 命令(Pyspark):
sql = "INSERT INTO dbo.Validation VALUES ('{}','{}','{}','{}')".format(app,date,anomaly,value)
SQL Server 表具有以下列:
app = [varchar](255)
date [date]
anomaly= [varchar](255)
value = [nvarchar](max)
字典如下图:
value = {'pt_PT.UTF-8': [88], 'lt_LT.UTF-8': [24], 'fi_FI.UTF-8': [4], 'fr_BE.UTF-8': [4], 'nl_NL.UTF-8': [4]}
打印的 SQL 命令:
INSERT INTO dbo.Validation VALUES ('TestApp','2020-05-06','LanguageAnomaly', '{'pt_PT.UTF-8': [88], 'lt_LT.UTF-8': [24], 'fi_FI.UTF-8': [4], 'fr_BE.UTF-8': [4], 'nl_NL.UTF-8': [4]}')
执行 SQL 命令时出错:
com.microsoft.sqlserver.jdbc.SQLServerException:“pt_PT”附近的语法不正确。
我遇到的问题似乎与插入字典参数“值”有关。这可能与代码无法正确解析为整个字符串的字典键中的撇号有关。
我该如何解决这个问题?如果字典键是没有引号(')的数字值/int,这似乎可以找到。
谢谢。
解决方案
您的问题是您的 SQL 插入语句中的字典引号,您需要通过将它们加倍来转义它们:
sql = "INSERT INTO dbo.Validation VALUES ('{}','{}','{}','{}')".format(app,date,anomaly,str(value).replace("'", "''"))
推荐阅读
- python - 如何使用面向对象的代码在 matplotlib 图周围绘制边框?
- swiftui - 如何在 SwiftUI 中通过 dx,dy 扩展框架
- javascript - 将旋转地球上的标记与 D3.js 中的线连接起来
- python - 根目录下所有小部件继承的python tkinter透明度
- mysql - Django反向数据库查找多个对象
- asp.net-core - ASPNET Core 3.1 身份:10 分钟后注销用户
- networking - qemu openbsd 网络问题
- android - Android比较两个声音
- python - 如何将文件拆分为起始索引和结束索引之间的不规则部分?
- r - na.omit 函数不会删除包含 NA 的行