2009-07-04 2 views
2

파이썬 변수로 제공된 값으로 하나의 레코드에서 여러 열을 업데이트 할 수있는 유효한 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 구문에 오류가 있다는 정보를 수신 유지. 나는 그것을 발견 할 수 없다. 누군가 내 실수를 지적하거나 작성해야하는 방법을 보여줄 수 있습니까?

답변

7

매개 변수가있는 쿼리를 사용하는 동안 문자열 서식을 사용하고 있습니다. 다음과 같이하십시오 :

cursor.execute("UPDATE table_name SET field1=%s ... field10=%s WHERE id=%s", (var1,... var10, id)) 

정말 10 개의 변수로 게시해야합니까? 포맷하기가 너무 힘들어서 포기했습니다.

+0

감사합니다. 이 작품! – elfuego1

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) 
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() 

lstNuevosValsql 명령에 대체 할 수있는 모든 매개 변수가 있습니다. lstNuevosVal의 값은

['Soporte 1', '6.35', '7.36', '8.37', '9.38', '10.39', 'Soporte 306048\nCabeza 3072589\nMáquina: Deco20\n\n'] 
관련 문제