【问题标题】:python SQL query: Bad operand type for unary +: 'str'python SQL查询:一元+的错误操作数类型:'str'
【发布时间】:2020-10-30 10:38:25
【问题描述】:

我在 python 中遇到过几次此类问题。而我只想创建一个sql更新查询。

我的脚本如下所示

update1 = '''UPDATE User_Answer_Knowledge SET'''
+ "integration =" + str(21) + ", scope =" + str(12) + ", schedule =" + str(13) + ", cost =" + str(14) 
+ ", quality =" + str(15) + ", resource =" + str(16) + ", communication =" + str(17) + "WHERE User_Key = 1"

那么到底是什么问题呢?我也尝试了以下代码,但出现了同样的问题

update1 = '''UPDATE User_Answer_Knowledge SET'''
+ "integration =" + 21 + ", scope =" + 12 + ", schedule =" + 13 + ", cost =" + 14 
+ ", quality =" + 15 + ", resource =" + 16 + ", communication =" + 17 + "WHERE User_Key = 1"
update1 = '''UPDATE User_Answer_Knowledge SET'''
+ "integration =" + "21" + ", scope =" + "12" + ", schedule =" + "13" + ", cost =" + "14" 
+ ", quality =" + "15" + ", resource =" + "16" + ", communication =" + "17" + "WHERE User_Key = 1"
update1 = '''UPDATE User_Answer_Knowledge SET'''
+ "integration =" + '21' + ", scope =" + '12' + ", schedule =" + '13' + ", cost =" + '14' \+ ", quality =" + '15' + ", resource =" + '16' + ", communication =" + '17' + "WHERE User_Key = 1"

【问题讨论】:

    标签: python sql pyodbc


    【解决方案1】:

    您需要在行尾添加一些\

    update1 = '''UPDATE User_Answer_Knowledge SET''' \
    + "integration =" + str(21) + ", scope =" + str(12) + ", schedule =" + str(13) + ", cost =" + str(14) \
    + ", quality =" + str(15) + ", resource =" + str(16) + ", communication =" + str(17) + "WHERE User_Key = 1"
    

    否则字符串声明以换行结束

    【讨论】:

      【解决方案2】:

      您似乎已将语句拆分为多行。因此,它抱怨以+ 符号开头的行。

      有多种方法可以解决此问题。你可以:

      • 将所有连接写在一行上
      • 在行尾使用\
      • 在所有参数周围使用括号

      【讨论】:

        【解决方案3】:

        @rdas 已经回答,但我还想强调您的查询容易受到sql injection 的攻击 您应该像这样对输入进行参数化

        "update table value = {0},value2={1}".format('21','99')
        >>> 'update table value = 21,value2=99'
        

        【讨论】:

        • 关于 sql 注入的要点。然而,这里列出的代码根本没有参数化查询,而只是进行了字符串格式化,这与字符串连接有完全相同的问题。
        猜你喜欢
        • 1970-01-01
        • 2014-01-02
        • 1970-01-01
        • 1970-01-01
        • 2013-03-28
        • 2017-11-21
        • 2021-01-15
        • 1970-01-01
        相关资源
        最近更新 更多