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

Python操作Azure SQL插入语句报错:无效列名'SMG'求助

问题原因

你拼接生成的SQL语句里,SMG没有被单引号包裹,SQL Server会把它当作列名解析,而不是字符串类型的字段值,所以触发了「无效列名」的错误。换成数字1时,因为数字类型不需要引号,所以语句能正常执行。

解决方法

方法1:临时给字符串值加单引号

修改SQL拼接逻辑,给respons['symbol']前后加上单引号:

SQLQuery ="""
                INSERT INTO [dbo].[Input_Table_Test] 
                VALUES ('"""+(respons['symbol'])+"""',1,1,1,1,1,1,1,1,1,1,1,1,1,1,1);"""

⚠️ 注意:这种方法存在SQL注入风险,只适合临时测试,不建议在生产环境使用。

方法2:使用参数化查询(推荐)

Python操作数据库时,参数化查询是更安全、规范的写法,能自动处理类型和引号问题,还能避免SQL注入:
以pyodbc为例:

# 定义带占位符的SQL语句
SQLQuery = """
    INSERT INTO [dbo].[Input_Table_Test] 
    VALUES (?,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1);
"""
# 执行时传入参数
cursor.execute(SQLQuery, (respons['symbol'],))
conn.commit()

如果用其他数据库驱动(如pymssql),占位符可能是%s,但核心逻辑一致:把动态值从SQL语句中分离,通过参数传递。

内容的提问来源于stack exchange,提问作者Kexxler

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 08:32:40