web2py consultas dinámicas


En muchos casos es posible que necesite una consulta basada en múltiples conjuntos de información. Pensar en un cuadro de búsqueda, en la que desea ofrecer la opción de buscar en múltiples áreas (título, contenido, los autores) o excluir a estas áreas. O un sistema de gestión de clientes, en el que puede ser una consulta proporcionado por el nombre del cliente, número de teléfono o cualquier otro número de opciones que se pueden filtrar hacia abajo. Hay, por supuesto, cualquier número de situaciones que es posible que necesite Si la lógica en las consultas de base de datos.

Añadiendo los resultados de las declaraciones de bases de datos seleccionar varios no sería aconsejable, ya que se accede a la base de datos varias veces, y conduce a la lenta, diseño ineficiente. El objetivo es golpear la base de datos sólo una vez, al obtener todos los de la mejor información es necesaria en una consulta dinámica sería muy útil. En web2py, esto se puede lograr de varias maneras.

La forma más sencilla de crear una consulta dinámica web2py es comenzar con un objeto Set en blanco, y luego filtrar la consulta a partir de ahí.

Seleccionar
qset = db ()
 si arg1 ==  "xyz" : qset = (db qset . abc . id >  0 )
 si arg2 ==  "xyz" : qset = qset (db . def . id >  0 ) 
qset . select ()

Para una versión más avanzada, puede agregar una consulta a una lista y el uso de Pythonreducir la función.

Seleccionar
consultas = []
 si arg1 ==  "xyz" : las consultas . append (db . abc . id >  0 )
 si arg2 ==  "xyz" : las consultas . append (db . def . id >  0 ) 
consulta =  reducir ( lambda a, b: (a + b), las consultas)
consulta . select ()

O si usted está haciendo el mismo tipo de consulta, a una lista de resultados

Seleccionar
q = solicitud . vars . q
consulta = ( # Comience con una consulta por defecto
              db . página . título . inferior () . como (q)
             | db . página . contenido . inferior () . como (q)
)

# A continuación, ejecute a través de cada elemento, y la búsqueda de la palabra específica en la prueba. 
para qs de  filtro ( lambda a: a =!  '' , q . split ( '' )):
    consulta = consulta | db . página . contenido . inferior () . como (cs . strip ())

filas = db (query) . select ()

0

0
 

Leave a Reply