Python连接SQL Server执行INSERT时如何传入变量替换硬编码值
参数化写入SQL Server的实现方法
直接使用pyodbc支持的参数化查询即可,不要用字符串拼接的方式传值,既可以避免SQL注入风险,也能自动处理日期、数值类型的格式匹配问题。
修正点说明
- 补全原函数的缩进和返回值:原
LiraRateApiCall函数内部代码无缩进,也没有返回获取到的日期、汇率值,需要补全return逻辑 - SQL语句中用
?作为参数占位符(ODBC驱动适配SQL Server的标准参数标记),占位符顺序和传入的变量顺序一一对应 - 变量作为
cursor.execute()的第二参数传入,不要直接写在SQL字符串里 - 如果
Time1字段是SQL Server的日期类型,直接传入datetime对象即可,不需要手动转字符串;如果是字符类型,再调用strftime转成对应格式的字符串传入
修正后的完整代码
import requests from datetime import datetime import pyodbc as odbc def LiraRateApiCall(): # 替换为实际的里拉汇率API请求地址 url = "你的实际API地址" R = requests.get(url) timestamp = R.json()['buy'][-1][0]/1000 format_date = '%d/%m/%y' date = datetime.fromtimestamp(timestamp) buyRate = R.json()['buy'][-1][1] print(date.strftime(format_date)) print(buyRate) # 返回接口获取到的日期、汇率值 return date, buyRate # 调用接口拿到动态数据 date, buyRate = LiraRateApiCall() # 建立SQL Server连接 conn = odbc.connect("Driver={ODBC Driver 17 for SQL Server};" 'Server=LAPTOP-36NUUO53\SQLEXPRESS;' 'Database=test;' 'Trusted_connection=yes;') cursor = conn.cursor() # 参数化执行插入语句,?占位符和传入参数顺序一一对应 cursor.execute(''' INSERT INTO Data_table (Time1,Price) VALUES (?, ?), ('Date2' , 142) ''', (date, buyRate)) conn.commit() # 查询验证写入结果 cursor.execute('SELECT * FROM Data_table') for row in cursor: print(row) # 释放连接资源 cursor.close() conn.close()
注意:
- 如果
Time1字段是字符串类型而非日期类型,把传入的date替换为date.strftime(format_date)即可,和之前打印的日期格式保持一致。- 如果不需要原代码里第二行硬编码的测试数据,直接删掉SQL语句VALUES里的
, ('Date2' , 142)即可。
内容的提问来源于stack exchange,提问作者kevin
相关产品推荐
相关产品推荐

