使用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
相关产品推荐
相关产品推荐

