Foros del Web » Programando para Internet » Python »

Ayuda con la sintaxis de cursor.execute

Estas en el tema de Ayuda con la sintaxis de cursor.execute en el foro de Python en Foros del Web. Muy buenas a todos. Estoy realizando un programa que se conecta a una base de datos Mysql, por lo que estoy utilizando el módulo Mysqldb. ...
  #1 (permalink)  
Antiguo 17/09/2009, 08:32
 
Fecha de Ingreso: marzo-2009
Mensajes: 11
Antigüedad: 15 años
Puntos: 0
Ayuda con la sintaxis de cursor.execute

Muy buenas a todos.

Estoy realizando un programa que se conecta a una base de datos Mysql, por lo que estoy utilizando el módulo Mysqldb. Quiero realizar las querys de forma "elegante" en cursor.execute, pero no lo logro. A través de la red, lo que he entendido y es que debe hacerse así:

Código python:
Ver original
  1. cursor.execute("""SELECT * FROM Tabla WHERE
  2.             campo = %s and
  3.             fecha= %s-%s-%s and
  4.             hora = %s%s%s and
  5.             numero = %s;""", \
  6.              (datos[0], datos[1], datos[2], \
  7.              datos[3], datos[4], datos[5], datos[6], \
  8.              datos[7]))

Sin embargo en mi código no hay manera de que funcione. ¿El problema viene de que algunos campos de datos[] son númericos y otros cadenas? ¿Me podríais explicar cuál es el modo correcto de usar esta función?

Muchas gracias, mientras seguiré intentándolo.
  #2 (permalink)  
Antiguo 17/09/2009, 10:22
AlvaroG
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Ayuda con la sintaxis de cursor.execute

No tengo por aquí el manual de MySQLdb, pero parece que el parámetro debe ser una cadena, y que estás utilizando sustitución en ella.
Si ese es el caso (que no hay forma de saberlo ya que no especificas cuál es el error), prueba dejándolo así

Código python:
Ver original
  1. cursor.execute("""SELECT * FROM Tabla WHERE
  2.             campo = %s and
  3.             fecha= %s-%s-%s and
  4.             hora = %s%s%s and
  5.             numero = %s;""" % \
  6.              (datos[0], datos[1], datos[2], datos[3], datos[4], datos[5], datos[6], datos[7]))

Con eso debería hacerse la sustitución apropiadamente. Pero de nuevo, solamente sabremos si ese es el problema real si pones el error que tienes, tal cual lo ves. No alcanza con decir "no hay manera de que funcione".


Saludos.
  #3 (permalink)  
Antiguo 17/09/2009, 11:54
 
Fecha de Ingreso: marzo-2009
Mensajes: 11
Antigüedad: 15 años
Puntos: 0
Respuesta: Ayuda con la sintaxis de cursor.execute

Tu forma es una opción, pero no la mejor porque no escapa caracteres, y pasándolo como parámetro a la función, sí. Además habría que ponerle las comillas a los campos que son cadena, mientras que la función lo hace sola.

El error me lo daba en la sentencia sql, parece que no puedo usar '%s-%s-%s' para un formar un campo. Construyéndolo primero y pasándoselo después, sí funciona.

Muchas gracias, espero que esto le sirva a alguien más.
  #4 (permalink)  
Antiguo 17/09/2009, 12:50
Avatar de razpeitia
Moderador
 
Fecha de Ingreso: marzo-2005
Ubicación: Monterrey, México
Mensajes: 7.321
Antigüedad: 19 años
Puntos: 1360
Respuesta: Ayuda con la sintaxis de cursor.execute

Si quieres que espace los caracteres puedes usar
Mysqldb.escape_string
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 13:03.