[pyar] Filtrar dias de la semana SQLAlchemy

Mariano Mara mariano.mara en gmail.com
Mar Dic 18 11:56:38 ART 2012



On 12/18/2012 11:41 AM, Gabriel Pozo wrote:
> Si eso es verdad Fede, vos me recomendas otra cosa?
> En estos momentos estoy trabajando sobre MySQL
>
>
>
> From: Federico Apelhanz <elmaildejapel en gmail.com
> <mailto:elmaildejapel en gmail.com>>
> El 17 de diciembre de 2012 17:36, Gabriel Pozo <jackgris2 en gmail.com
> <mailto:jackgris2 en gmail.com>>escribió:
>
>> Me auto respondo, imagino, que la mayoría ya sabia alguna opción valida,
>> pero por si alguno no lo sabía, pego
>> un correo del grupo de correo de SQLAlchemy, realmente mas sencillo de lo
>> que imaginaba :P
>>
>> In SQLAchemy you can refer to DB functions via func[0] construct.  Say,
>> you have the following model:
>>
>>   class Model(Base):
>>       __tablename__ = 'foo'
>>       id = Column(Integer, primary_key=True)
>>       date = Column(DateTime)
>>
>> You can query it like this:
>>
>>   session.query(Model).filter(
>>       # 1 = Sunday, 2 = Monday, ..., 7 = Saturday.
>>       func.dayofweek(Model.date).between(2, 6)
>>   ).all()
>>
>> [0]
>>http://docs.sqlalchemy.org/en/rel_0_8/core/expression_api.html#sqlalchemy.sql.expression.func
>>
>>
>>
>
> Si, el problema de eso es que te salteas la capa de abstracción, si mañana
> switcheas de base de datos, no te va a andar.
>
> *Saludos, Gabriel
>

Estas hablando de un criterio que vas a aplicar como filtro de selección 
en tus queries: definitivamente te conviene usar funciones nativas del 
motor ya que están optimizadas para darte resultados en forma más veloz 
que usando una función generica.
Al decidir entre funciones nativas o funciones genericas que estén más 
arriba en la capa del motor, tenes que preguntarte:
¿cuantas veces pensas cambiar de motor? ¿estás haciendo un producto 
generico que tus clientes pueden instalar en distintos motores y pensas 
darle soporte a todos? ¿cuantas funciones distintas vas a usar en 
cuantos lugares distintos de tu código? ¿hiciste un bechmark entre una 
función generica y una función nativa para asegurarte que a nivel de 
performance no te afecta? Esa es la forma más clara de saber que te 
conviene hacer: si tener un poco más de código que mantener a cambio de 
una mejor performance o si la ganancia en velocidad es tan marginal que 
no vale la pena la función extra.
Como si fuera poco, sqlalchemy te da soporte para aplicar distintos 
criterios de acuerdo al motor usado, ergo podes aplicar funciones de 
distintos motores y que sea la capa que se encargue de decidir:
http://docs.sqlalchemy.org/en/rel_0_8/core/compiler.html#further-examples





More information about the pyar mailing list