You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用WIQL查询时遇"Expecting closing quote"错误求助

WIQL查询"Expecting closing quote"错误排查与解决

错误原因

  • 变量project_name或title_item包含单引号:比如标题内容是Don't Delete,直接拼接会让WIQL语句里的字符串提前闭合,触发引号不匹配的语法错误。
  • 变量带有换行符或多余空白字符:错误提示里的\n说明title_item可能包含换行,拼接后打乱了WIQL的语句结构,造成引号匹配失败。

解决办法

1. 手动转义特殊字符

对变量里的单引号和换行符做处理,WIQL中用两个单引号表示一个单引号,同时去掉换行避免语句结构混乱:

# 处理变量里的单引号和换行
escaped_project = project_name.replace("'", "''")
escaped_title = str(title_item).replace("'", "''").replace("\n", " ").strip()

wiql_query = {
    "query": f"""SELECT [System.Id], [System.Title], [System.Tags]
                 FROM WorkItems
                 WHERE [System.TeamProject] = '{escaped_project}'
                 AND [System.Title] = '{escaped_title}'
                 AND [System.State] NOT IN ('Deleted', 'Removed', 'Closed')
                 AND [System.BoardColumn] NOT IN ('Recycle Bin')
                 """,
}

2. 使用参数化查询(推荐)

用参数化方式替代字符串拼接,彻底避免语法错误和注入风险,以Azure DevOps Python SDK为例:

from azure.devops.connection import Connection
from msrest.authentication import BasicAuthentication

# 初始化连接(替换成你的组织地址和PAT令牌)
creds = BasicAuthentication('', '你的PAT令牌')
conn = Connection(base_url='https://dev.azure.com/你的组织名', creds=creds)
wi_client = conn.clients.get_work_item_tracking_client()

# 定义带参数的WIQL语句
wiql_str = """SELECT [System.Id], [System.Title], [System.Tags]
              FROM WorkItems
              WHERE [System.TeamProject] = @project
              AND [System.Title] = @title
              AND [System.State] NOT IN ('Deleted', 'Removed', 'Closed')
              AND [System.BoardColumn] NOT IN ('Recycle Bin')
           """

# 传入参数执行查询
result = wi_client.query_by_wiql(wiql_str, parameters={"project": project_name, "title": str(title_item)})

内容的提问来源于stack exchange,提问作者Adithya Sharma

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.22 03:12:07