Jupyter Notebook用pyodbc查询SQL Server 2018出现Invalid column name错误如何解决
错误原因
- 代码逻辑顺序错误,还没定义查询语句和参数变量就提前执行了一次无参数的查询
- pyodbc操作SQL Server的参数占位符应该用
?,你写的[{%s}]会被SQL Server的方括号语法解析为列名,自然触发找不到对应列的报错 - 没有定义
query变量,第二次调用cursor.execute()时找不到可用的查询语句
修正后的完整代码
import pyodbc import datetime conn = pyodbc.connect('Driver={SQL Server};' 'Server=DESKTOP-MBJNNJR;' 'Database=master;' 'Trusted_Connection=yes;') cursor = conn.cursor() # 定义带正确占位符的查询语句 query = "SELECT Employee_Name, Hire_Date FROM Employee WHERE Hire_Date BETWEEN ? AND ?" hire_start = datetime.date(1999, 1, 1) hire_end = datetime.date(1999, 12, 31) # 传入参数执行查询 cursor.execute(query, (hire_start, hire_end)) for (Employee_Name, Hire_Date) in cursor: print("{}, {} was hired on {:%d %m %Y}".format(Employee_Name, Hire_Date)) cursor.close() conn.close()
补充说明
- SQL Server的
[]语法是用来包裹关键字、带特殊字符的列名/表名的,不要套在参数占位符外面,否则会被解析为字段名 - pyodbc参数化查询统一使用
?作为占位符,不需要加其他修饰符,传入参数的顺序要和占位符顺序对应
内容的提问来源于stack exchange,提问作者Shaikh
相关产品推荐
相关产品推荐

