代码之家  ›  专栏  ›  技术社区  ›  wolak

PYTHON:使用PYTHON变量更新多个列

  •  2
  • wolak  · 技术社区  · 7 年前

    我的声明如下:

    db = MySQLdb.connect(host="localhost", user="user", passwd="password", db="dbname")
    cursor = db.cursor()
    sql_update = "UPDATE table_name SET field1=%s, field2=%s, field3=%s, field4=%s, field5=%s, field6=%s, field7=%s, field8=%s, field9=%s, field10=%s WHERE id=%s" % (var1, var2, var3, var4, var5, var6, var7, var8, var9, var10, id)
    cursor.execute(sql_update)
    cursor.close ()
    db.commit()
    db.close()
    

    在尝试执行查询时,我不断收到SQL语法中有错误的信息。但是我找不到它。 有人能指出我的错误或告诉我应该怎么写吗?

    3 回复  |  直到 8 年前
        1
  •  17
  •   zxcv    5 年前

    您使用的是字符串格式,而您应该使用参数化查询。这样做:

    cursor.execute("UPDATE table_name SET field1=%s, ..., field10=%s WHERE id=%s", (var1,... var10, id))
    
        2
  •  1
  •   Ricardo mp    10 年前

        def bscaSoporte(self, denom_sop):
            soporte = (denom_sop,) #Para que tome la variable, lista
            sql= 'SELECT * FROM SOPORTE_ID WHERE denom_sop LIKE ?'
            self.cursor1.execute(sql, soporte)
            return self.cursor1.fetchall()
    
        def updSoporte(self, lstNuevosVal):
            #busca soporte, SOLO HAY UNO que cumpla
            denom_sop = lstNuevosVal.pop(0)
            print(lstNuevosVal)
            encontrado = self.bscaSoporte(denom_sop)
            soporte = (denom_sop,) #Para que tome la variable, lista
            if encontrado != None:
                sqlupdate =('UPDATE SOPORTE_ID SET  dst_pln_eje = ?, geom_Z_eje = ?, \
                geom_Y_0_grd = ?, dst_hta_eje = ?,  geom_Z_0_grd = ?, \
                descrip = ? WHERE denom_sop  LIKE ?')
            #añado denom_soporte al final de la lista
            lstNuevosVal.append(denom_sop)
            self.cursor1.execute(sqlupdate, (lstNuevosVal))
            self.conexion.commit() 
    

    lstNuevosVal 中的所有参数都要替换 sql 伊斯特努埃沃斯瓦尔

    ['Soporte 1', '6.35', '7.36', '8.37', '9.38', '10.39', 'Soporte 306048\nCabeza 3072589\nMáquina: Deco20\n\n']
    
        3
  •  1
  •   Mohamed Elghobary    5 年前

    • 您应该确保用户和密码是正确的
    • 占位符的数量必须与值的数量匹配

    请尝试以下代码:

    db = MySQLdb.connect(host="localhost", user="user", passwd="password", db="dbname")
    cursor = db.cursor()
    sql_update = "UPDATE table_name SET field1=%s, field2=%s, field3=%s, field4=%s, field5=%s, field6=%s, field7=%s, field8=%s, field9=%s, field10=%s WHERE id=%s"
    val =  (var1, var2, var3, var4, var5, var6, var7, var8, var9, var10, id)
    cursor.execute(sql_update, val)
    db.commit()
    cursor.close ()
    db.close()
    
        4
  •  -2
  •   Grzegorz Oledzki    17 年前

    sql_update = "UPDATE table_name SET field1='%s', field2='%s', field3='%s', field4='%s', field5='%s', field6='%s', field7='%s', field8='%s', field9='%s', field10='%s' WHERE id='%s'" % (var1, var2, var3, var4, var5, var6, var7, var8, var9, var10, id)