Dos consultas sobre MySQL

Gerardo Juarez gerardo en computo-industrial.com.mx
Lun Abr 23 16:15:23 CEST 2007


Hola,

Necesitas quitar el espacio entre '%' y la 's':

  LblQNMA = wx.StaticText(panelMA, -1, "Nombre: %s" % (q[0]), (50, 80))
  LblQDMA = wx.StaticText(panelMA, -1, "DNI: %s" % (q[1]), (50, 80))
  self.MA.Show(True)

El % por si solo hace otra funcion. Mira este ejemplo:  

print "el valor de x es = %d" % x

%d dice que habra un entero alli,  mientras que el % solo dice que la 
variable x es la que se sustituira en la cadena.

En cuanto a tu segundo problema, me parece que tiene que ver con el mapeo 
de los caracteres de UTF a la consola o terminal, pero prefiero esperar 
que contesten los "gurus" de la lista... :-)

saludos
Gerardo Juarez


On Mon, 23 Apr 2007, Javier Castrillo wrote:

> Hola a todos. Ahora que me puse en campaña para hacer algo en serio
> estoy aprendiendo mucho y cada vez más entusiasmado. La verdad es que
> Python es realmente divertido.
> La molestia de hoy es la siguiente:
> Mi aplicación hace abm de ciertos datos que están en una base MySQL.
> Para conectarme uso MySQLdb que me permite conectarme sin problemas
> desde la aplicación y hace la consulta de manera impecable salvo (si
> no no sería divertido...) dos detalles a saber:
> 
> 1) El resultado de un query me es devuelto como una tupla. Y no puedo
> imprimir los elementos individuales por su índice. Es decir:
> 
> # Modificaciones de alumos
> 
>     def OnModAlumnos(self, event):
>         self.dialogMA = wx.TextEntryDialog(None,
>         "Ingrese el Apellido del alumno", "Modificación de alumnos",
> "", style=wx.OK|wx.CANCEL, pos=(300, 300))
>         if self.dialogMA.ShowModal() == wx.ID_OK:
>             self.apellido = self.dialogMA.GetValue()
>         self.dialogMA.Destroy()
>         self.MA = wx.Frame(self, -1, "Modificación de datos de
> alumno", (250, 120), (420, 420))
>         panelMA = wx.Panel (self.MA, -1 )
>         LblApellMA = wx.StaticText(panelMA, -1, 'Alumnos que cumplen
> el criterio de búsqueda:', (30, 20))
>         LblApellMA = wx.StaticText(panelMA, -1, "Apellido : % s" %
> (self.apellido), (50, 50))
>         c = self.db.cursor() #la conexión ya está hecha antes
>         c.execute("""SELECT nombres, num_doc FROM alumnos WHERE
> apellidos = %s""", (self.apellido,))
>         q = c.fetchmany()
>         LblQNMA = wx.StaticText(panelMA, -1, "Salida: % s" % (q), (50, 80))
>         self.MA.Show(True)
> 
> Si corro esto que puse precedentemente e ingreso el apellido en el
> dialog, me da como valor de q ('nombreencontrado', 'dniencontrado'), o
> sea que la consulta se hizo bien y halló los valores, pero si cambio
> un par de líneas para dar formato correcto a la salida:
> 
> 	LblQNMA = wx.StaticText(panelMA, -1, "Nombre: % s" % (q[0]), (50, 80))
> 	LblQDMA = wx.StaticText(panelMA, -1, "DNI: % s" % (q[1]), (50, 80))
>         self.MA.Show(True)
> 
> se cuelga y me sale en la consola el siguiente error:
> 
>   File "/home/javier/python/wxpython/proyecto_sancabase/sancabase.py",
> line 448, in OnModAlumnos
>     LblQNMA = wx.StaticText(panelMA, -1, "Nombre: % s" % (q[0]), (50, 80))
> TypeError: not all arguments converted during string formatting
> 
> Probé sacar primero los índices y luego asignar la cadena, probé con
> comillas, etc pero me sigue dando error. La verdad es que no puedo dar
> con la solución y les pido un centro. Vamos al otro detalle que no me
> cierra
> 
> 2) Si el resultado de la query es una palabra con acento (digamos
> 'Julián') el resultado obtenido (al traerlo desde mysql) es
> 'Juli\xe1n'. Los StaticText que pongo yo salen bien (mi documento
> tiene una línea al principio # -*- coding: UTF8 -*- ). La tabla de
> MySQL la puse en UTF-8-spanish, UTF-8-spanish_2, UTF-8-bin,
> UTF-8-unicode pero el error persiste. Tiene solución??
> 
> Muchas gracias a todos. Perdón por tantas molestias
> 
> 
> 




Más información sobre la lista de distribución Python-es