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