【问题标题】:Conversion failed when converting varchar value '{}' to data type int? [duplicate]将 varchar 值“{}”转换为数据类型 int 时转换失败? [复制]
【发布时间】:2014-10-13 01:36:55
【问题描述】:

我对 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 是一个 int。任何帮助,将不胜感激!谢谢!

【问题讨论】:

    标签: python sql


    【解决方案1】:

    字符串是不可变的,因此在其上调用.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 攻击。

    【讨论】:

      猜你喜欢
      • 2011-12-01
      • 2012-04-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多