Filtrar filas BD en python

jmajadot adminies.reinoaftasi en edu.juntaextremadura.net
Mar Dic 19 07:59:17 CET 2006


El lun, 18-12-2006 a las 22:32 +0100, Jesus Rodriguez escribió:
> Buenas amigos,
> 
> Estoy haciendo un programa que usa bases de datos y claro, hay una cosa que
> no sé hacer, y realmente con mi actual conocimiento de SQL no podría decir
> si tengo que hacer esto con SQL o código python.
> 
> Me explico:
> 
> Quiero hacer algo como el filtrado de canciones que hace rhythmbox,
> quodlibet, banshee, etc.
> 
> O sea, sale en un treeview la lista de canciones y colocando un caracter en
> el entry, ya empieza a mostrar solo las entradas que contengan ese caracter
> (o conjunto de caracteres).
> 
> Pongo un ejemplo:
> 
> Si tengo una base de datos con 3 columnas, por ejemplo: Nombre, Apellido,
> Provincia. y tengo 3 entradas:
> 
> Francisco, Garcia, Madrid
> Maria, perez, Valencia
> Juan, Garcia, Palencia
> 
> Entonces si no hay nada en el entry, pues saldrian todas las entradas, pero
> si coloco por ejemplo: "alencia" pues mostraria los dos ultimos ya que esa
> cadena existe dentro de la fila.
> 
> Si pongo "ma" pues saldrían los 2 primeros, ya que "ma" está en Madrid y
> está en Maria.
> 
> Segun creo, para buscar cosas en una BD se puede usar WHERE:
> 
> select * from tabla where Nombre='Ma%';
Select * from tabla where Nombre like '%Ma%' or Apellido like '%Ma%' or
Provincia like '%Ma%'

Pero "ojito" con esta sentencia, sin indices y dependiendo del volumen
de datos, te podría tardar en responder una eternidad (vamos las
decimas, segundos necesarios para desesperarse).

Consejo, no es conveniente utiliar "*" NUNCA, esta comprobado que es más
factible (hablamos de rapidez en la lectura de datos) el colocar todos
los campos de la tabla, e incluso, solamente los necesarios e
imprescindibles.
> 
> Pero claro, la cosa está en que quiero que la cadena que pongo para filtrar,
> se busque en cualquier columna de la fila y esa cadena puede estar en
> cualquier sitio de una palabra, así que creo que no podría usar Where
> columna='xxx' ya que no quiero buscar en una columna solo, quiero buscar en
> todas, y tampoco podría usar lo de 'Ma%' ya que esto dice que busque al
> principio de una cadena, y quiero que sea en el principio, mitad o final de
> la cadena.
> 
> No sé si esto se peude hacer con SQL o esto se hace parseando entradas con
> python.
> 
> Y ya luego, supongo que tendría un evento que se lanzaria cada vez que se
> modificara el entry y haga el filtrado, aunque tener que abrir la base de
> datos, buscar, y cerrar la base de datos cada vez que modifique el entry,
> quizás sea algo lento.
> 
> Gracias.
> _______________________________________________
> Python-es mailing list
> Python-es en aditel.org
> http://listas.aditel.org/listinfo/python-es

------------ 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