无法使用 Python 字典作为列值执行 SQL 插入命令

Posted

技术标签:

【中文标题】无法使用 Python 字典作为列值执行 SQL 插入命令【英文标题】:Cannot execute SQL insert command using Python Dictionary as column value 【发布时间】:2020-05-19 00:49:35 【问题描述】:

我在 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,这似乎可以找到。

谢谢。

【问题讨论】:

【参考方案1】:

您的问题在于 SQL 插入语句中的字典引号,您需要通过将它们加倍来转义它们:

sql = "INSERT INTO dbo.Validation VALUES ('','','','')".format(app,date,anomaly,str(value).replace("'", "''"))

【讨论】:

以上是关于无法使用 Python 字典作为列值执行 SQL 插入命令的主要内容,如果未能解决你的问题,请参考以下文章

spark将列值作为sql查询执行

我如何将两个数据框列值作为键传递给2键到一个值字典,然后将结果传递到另一列?

将字典键设为行,将字典值设为列,一个值作为列名,一个作为列值

python MySQL执行SQL查询结果返回字典

python 使用Python标记生成器作为帮助程序来创建SQL SELECT子句的字典

python字典中,有个文本, 两列值 1对多关系,请问怎么把key和value都放在字典里呢?