You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.26 15:45:34