pyodbc执行UPDATE查询报错Must declare the scalar variable "@Station"如何解决
该需求完全可以实现,你遇到的报错是因为直接将Python变量名写在了SQL语句字符串中,SQL Server无法识别这些未在数据库侧声明的变量。你可以通过pyodbc的参数化查询功能完成变量传递,同时还能避免SQL注入风险,具体操作如下:
核心操作说明
- pyodbc使用
?作为SQL语句的参数占位符,占位符的顺序要和后续传入的参数顺序一一对应 - 从numpy数组中取出的元素默认是numpy专属数据类型,建议先转为Python原生数据类型,避免pyodbc识别异常
可运行代码示例
import numpy as np # 转换numpy类型为Python原生类型 Station = SN[0].item() if isinstance(SN[0], np.generic) else SN[0] Asset = AN[0].item() if isinstance(AN[0], np.generic) else AN[0] actual_start = ASD[0].item() if isinstance(ASD[0], np.generic) else ASD[0] actual_complete = ACD[0].item() if isinstance(ACD[0], np.generic) else ACD[0] cursor = conn.cursor() # 按占位符顺序传入参数元组 cursor.execute(''' UPDATE station SET ActualStartDate = ?, ActualCompletionDate = ? WHERE StationName = ? AND AssetNumber = ? ''', (actual_start, actual_complete, Station, Asset)) conn.commit() # 操作完成后关闭资源 cursor.close() conn.close()
注意事项
- 如果你使用的日期字段格式要求严格,建议提前将
actual_start和actual_complete转为Pythondatetime类型或者符合SQL Server规范的日期字符串,避免类型不匹配报错 - 你原有代码中的
cursor.execute('SELECT * FROM station')如果没有后续读结果的需求可以直接删除,不影响UPDATE操作的执行
内容的提问来源于stack exchange,提问作者Don99
相关产品推荐
相关产品推荐

