在 Python 中编写 SQL 语句时出现无效列名的错误

问题描述

我正在尝试用 Python 编写 sql 语句:'attribute' 是一个列名,我想更改其格式并将其作为参数提供。因为它的名字可以不同。

cur.execute("SELECT DATEADD(y," + attribute + ",'1980-01-01')")

但是我遇到了以下错误。 attribute=Date1 并且此列存在。

[42S22] [Microsoft][ODBC Driver 17 for sql Server][sql Server]无效的列名“Date1”。 (207) (sqlExecDirectW)"

解决方法

如果我正确理解您的代码,那么您正在 cur.execute 命令中构建字符串。如果您的 Python 是最新的,请尝试使用 fstrings。它们更具可读性,并且您不会看到带有所有引号的凌乱代码。如果您的 Python 版本不支持子字符串,请尝试在变量中构建请求以使代码更具可读性。
可能的解决方案:
cur.execute(f"SELECT DATEADD(y,{attribute},'1980-01-01')")
该字符串将导致 SELECT DATEADD(y,Date1,'1980-01-01')
查询中还缺少一个 FROM,错误 Invalid column 是正确的,因为您不知道在哪里可以找到该列