将varchar值'{}'转换为int数据类型时失败。
我刚接触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 注入 攻击。