转换varchar值时转换失败' {}'数据类型int?

时间:2014-08-19 20:08:16

标签: python sql

我对SQL很陌生,所以我只是对它有所了解。我想删除一个基于int值的行,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值时转换失败' {}'数据类型int。"我不知道为什么,因为dataID是一个i​​nt。任何帮助,将不胜感激!谢谢!

1 个答案:

答案 0 :(得分:3)

字符串是不可变的,因此在其上调用.format不会更改它 - 它会创建一个新字符串。

您可能想要这样做:

query = query.format(dataId)

存储格式化的 new 字符串。话虽如此,有更好的方法。您应该使用数据库连接器的paramstyle - 通常看起来像这样:

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 injection攻击。