Dos consultas sobre MySQL

Javier Castrillo riverplatense en gmail.com
Mie Mayo 2 18:02:30 CEST 2007


On 25/04/07, Gabriel Genellina <gagsl-py2 en yahoo.com.ar> wrote:

> Uydió... porqué es tan complicada la vida? :)

Aunque les parezca mentira me sigo peleando con este tema, me hice un
programita para aislarlo y ver qué onda

> Esto ya depende de como te llegan las cosas desde la base de datos, estas
> seguro de que vienen en utf8?

sgún phpmyadmin es utf-8-unicode-ci

> No tengo ni idea de qué querrán decir los de mysql con "utf8-spanish" (si
> es utf8 es unicode, y si es unicode no tiene sentido agregar spanish).
> Pero podrias poner: print type(q[0][0]), repr(q[0][0]) para ver si te
> llega string o unicode (en el registro famoso de Julián).


Fijate lo que me llega:

<type 'str'> 'Juli\xe1n'
Traceback (most recent call last):
  File "/home/javier/python/wxpython/proyecto_sancabase/probador.py",
line 36, in OnAceptar
    LblQ = wx.StaticText(self.panel, -1, "Nombre: %s" % q[0][0], (15, 90))
  File "/usr/lib/python2.5/site-packages/wx-2.8-gtk2-unicode/wx/_controls.py",
line 1135, in __init__
    _controls_.StaticText_swiginit(self,_controls_.new_StaticText(*args,
**kwargs))
  File "encodings/utf_8.py", line 16, in decode
UnicodeDecodeError: 'utf8' codec can't decode bytes in position 12-13:
unexpected end of data

El código (pequeño) del probador es:

#!/usr/bin/python
# -*- coding: UTF8 -*-

import wx, sys, MySQLdb

class App(wx.App):
	def OnInit(self):
		frame = Frame("Probador", (300, 300), (250, 250))
		frame.Show()
		self.SetTopWindow(frame)
		return True

#Clase Frame
class Frame(wx.Frame):
	def __init__(self, title, pos, size):
		wx.Frame.__init__(self, None, -1, title, pos, size)
		self.panel = wx.Panel(self, -1)
		LblProbando = wx.StaticText(self.panel , -1, 'Apellido: ', (15, 10))
		self.TxClBusqueda = wx.TextCtrl(self.panel, -1, '', (15, 30), (125, -1))
		self.TxClBusqueda.SetFocus()
		self.db = MySQLdb.connect("localhost", "javier", "javier", "escuela")
		boton = wx.Button(self.panel, wx.ID_OK, pos=(60, 150))
		self.Bind(wx.EVT_BUTTON, self.OnAceptar, boton)
		boton2 = wx.Button(self.panel, wx.ID_CANCEL, pos=(160, 150))
		self.Bind(wx.EVT_BUTTON, self.OnBorrar, boton2)

		
		
	def OnAceptar(self, event):
		self.apellido = self.TxClBusqueda.GetValue()
		c = self.db.cursor()
		text = wx.StaticText(self.panel, -1, "%s" % self.apellido, (15, 70))
		c.execute("""SELECT nombres FROM alumnos WHERE apellidos = %s""",
(self.apellido,))
		q = c.fetchmany()
		print type(q[0][0]), repr(q[0][0])
		LblQ = wx.StaticText(self.panel, -1, "Nombre: %s" % q[0][0], (15, 90))
	
	def OnBorrar(self, event):
		self.TxClBusqueda.SetValue('')
		LblQ = wx.StaticText(self.panel, -1, '             ', (15, 90))
		text = wx.StaticText(self.panel, -1, '             ', (15, 70))
	
if __name__== '__main__':
	app = App()
	app.MainLoop()


Y (si les sirve) si desde una consola de mysql hago la consulta se ve:

mysql> SELECT apellidos, nombres FROM alumnos ORDER by apellidos asc;
+--------------------+----------------+
| apellidos          | nombres        |
+--------------------+----------------+
| Aicega             | Magdalena      |
| Carrizo            | Juan Pablo     |
| Casta�ares         | Cecilia Malena |
| Castrillo          | Francisco Enzo |
| Castrillo Avenda�o | Marcos Agust�n |
| Rossi              | Juli�n         |
+--------------------+----------------+
6 rows in set (0.01 sec)

En lugar de "Castañares" o "Agustín" por ejemplo, así dejamos
descansar a Julián  :-)

desde ya muchísimas gracias por la ayuda!!!


Saludos

-- 
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
------------ próxima parte ------------
_______________________________________________
Python-es mailing list
Python-es en aditel.org
http://listas.aditel.org/listinfo/python-es


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