我正在尝试编写一个有效的mysql语句,该语句允许我使用作为python变量提供的值更新一个记录中的多个列。
我的陈述如下:
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语法错误的信息。我找不到它。 有人可以指出我的错误或告诉我应该怎么写?
答案 0 :(得分:7)
您正在使用字符串格式,而您应该做的是使用参数化查询。这样做:
cursor.execute("UPDATE table_name SET field1=%s ... field10=%s WHERE id=%s", (var1,... var10, id))
你真的需要发布10个变量吗?格式化令人沮丧,我放弃了。
答案 1 :(得分:0)
可能是关于字符串/ VARCHAR值的撇号:
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)
答案 2 :(得分:0)
我这样做了:
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
命令中替换的所有参数。 lstNuevosVal
的值为
['Soporte 1', '6.35', '7.36', '8.37', '9.38', '10.39', 'Soporte 306048\nCabeza 3072589\nMáquina: Deco20\n\n']
答案 3 :(得分:0)
请考虑这些注意事项:
请尝试以下代码:
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()