使用PyODBC查询MS SQL提示Invalid column name 'Escalation'如何解决
报错原因与解决方案
报错原因
MS SQL Server 默认开启QUOTED_IDENTIFIER配置,该配置下双引号包裹的内容会被解析为数据库对象名(列名、表名等),而非字符串常量。你在查询语句中使用双引号包裹了需要匹配的字符串值Escalation,导致数据库误将其识别为列名,而目标表中不存在该列,因此触发Invalid column name 'Escalation'报错。
解决方案
方案1:替换字符串包裹符
将SQL语句中包裹字符串的双引号替换为单引号,单引号是SQL标准中字符串字面量的通用包裹符号,修改后代码如下:
query = ''' select a.created, a.asset_num, a.description, a.resolution, a.type, a.subtype from SC_SR_EXPORT_V as a where TYPE = 'Escalation'; ''' data = pd.read_sql(query, cnxn) data.head()
方案2:使用参数化查询(更推荐)
通过pandas read_sql的params参数传递查询值,无需手动处理引号转义问题,同时可以防范SQL注入风险,适合查询值为动态变量的场景,代码如下:
query = ''' select a.created, a.asset_num, a.description, a.resolution, a.type, a.subtype from SC_SR_EXPORT_V as a where TYPE = ?; ''' # 参数放在元组中传入,即使值包含特殊字符也无需额外处理 data = pd.read_sql(query, cnxn, params=('Escalation',)) data.head()
内容的提问来源于stack exchange,提问作者Jack_loc
相关产品推荐
相关产品推荐

