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
相关产品推荐
相关产品推荐

