将varchar值'{}'转换为int数据类型时失败。

0 投票
1 回答
1194 浏览
提问于 2025-04-18 17:50

我刚接触SQL,所以还在摸索中。我想根据一个整数值DataID来删除一行数据,这个值是通过其他方法传过来的。下面是我的代码:

query = ("""DELETE FROM TradeSupportPortal.dbo.ExchangeDropCopyIgnore
                    WHERE TradeSupportPortal..ExchangeDropCopyIgnore.DropCopyID = '{}'""")

query.format(dataID)

cnxn = pyodbc.connect(self.__connection_string)
cursor = cnxn.cursor()
cursor.execute(query)
cnxn.commit()

但是,我收到了一个错误信息,内容是“在将varchar值'{}'转换为整数类型时失败。”我不明白为什么会这样,因为dataID本身就是一个整数。希望能得到一些帮助!谢谢!

1 个回答

3

字符串是不可改变的,所以在它上面调用 .format 方法并不会“改变”它——而是会创建一个新的字符串。

你可能想要做的是:

query = query.format(dataId)

把那个被格式化的新字符串存起来。话说回来,其实有更好的方法。你应该使用数据库连接器的 参数样式 ——它通常看起来像这样:

query = """DELETE FROM TradeSupportPortal.dbo.ExchangeDropCopyIgnore
                   WHERE TradeSupportPortal..ExchangeDropCopyIgnore.DropCopyID = '%s'"""

cnxn = pyodbc.connect(self.__connection_string)
cursor = cnxn.cursor()
cursor.execute(query, dataID)
cnxn.commit()

自己格式化字符串会让你容易受到 SQL 注入 攻击。

撰写回答