[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