【发布时间】:2021-12-17 21:27:22
【问题描述】:
我有一个需要使用 pyodbc 运行的带有多个参数的查询,但我遇到了问题。 这是查询的简化版,只有一个参数(我其实有6个)
declare @alertTypeName nvarchar(255)
set @alertTypeName = ?
SELECT TOP 1 Id FROM AlertType WHERE Name = @alertTypeName
@alertTypeName 可以包含特殊字符,例如“Boli şi Dăunători”。
当然,如果我直接在 SQL Server 中运行这个查询,我会设置@alertTypeName = N'Boli şi Dăunători'。如果不在文本前面添加 N,则 SELECT 不会返回任何内容。
我的问题是,如何将值作为参数发送到cursor.execute() 中的查询,以便正确编码?
这是我目前的python代码(简化版):
query = textwrap.dedent("""
declare @alertTypeName nvarchar(255)
set @alertTypeName = ?
SELECT TOP 1 Id FROM AlertType WHERE Name = @alertTypeName
""")
[...]
alertTypeName = "Boli şi Dăunători"
[...]
paramValues = [syswinAlertId, code, alertTypeName, alertMessage, createdBy, modifiedBy]
cursor.execute(query, paramValues)
alertTypeName 根据某些条件可以有不同的值,所以我不能直接将它添加到查询文本中。
【问题讨论】:
-
我们可以假设您正在运行 Python 3.x 吗?
-
这个link 可能会有所帮助。
-
@GordThompson 是的,我使用的是 3.8
-
@Zhorov cnxn.setencoding('utf-8') 似乎不起作用
标签: python sql sql-server parameter-passing pyodbc