Dos consultas sobre MySQL

Javier Castrillo riverplatense en gmail.com
Lun Abr 23 15:37:40 CEST 2007


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


-- 
Javier Castrillo

=========================================================
GNU / Linux User #242275

-------------------------------
pub   1024D/B482896F 2006-09-04
uid                  Javier Castrillo (El Palo) <riverplatense en gmail.com>
sub   2048g/52C99A4E 2006-09-04

Clave pública: carapa.com.ar/public.asc
http://carapa.com.ar
http://javiercastrillo.com.ar
http://riverplatense.googlepages.com
=========================================================
Usá Software Libre




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