there's nothing particularly advanced in that query and either system can 
accomplish it in a straightforward way.

What's the part of it that isn't clear ?   Here you'd be using funx.max(), 
join(), "x != None", group_by() and order_by().




On Apr 13, 2012, at 1:59 AM, jo wrote:

> Thanks Michael, your explanation is comprehensive, currently I'm using both 
> of them,
> but I feared that one of them could become obsolete in the future.
> I'm trying to translate some queries that I had done with engine
> but I find it hard to do.
> For example, a query like this one, I can not set it with query neither with 
> select,
> what do you suggest?
> 
> SELECT max(sopralluogo.data_sopralluogo),
> scadenza_malattia.cod_malattia,
> scadenza_malattia.id_unita_aziendale
> FROM scadenza_malattia
> JOIN scadenziario ON scadenza_malattia.id_scadenziario = scadenziario.id
> JOIN sopralluogo ON scadenziario.id_sopralluogo = sopralluogo.id
> WHERE scadenza_malattia.cod_malattia IS NOT NULL AND
> sopralluogo.data_sopralluogo > '2011-01-01' AND
> scadenza_malattia.id_unita_aziendale = 2 AND
> scadenza_malattia.cod_malattia = '012'
> GROUP BY scadenza_malattia.id_unita_aziendale,
> scadenza_malattia.cod_malattia
> ORDER BY scadenza_malattia.id_unita_aziendale,
> scadenza_malattia.cod_malattia
> 
> 
> 
> Michael Bayer wrote:
>> There's some degree of history here as SQLAlchemy initially didn't have the 
>> whole "generative" notion of things, and the Mapper object itself would 
>> accept arguments which it passed mostly straight to a select() object.   So 
>> you saw similar interfaces and it was kind of like switching between 
>> table.select(<all the arguments>) and mapper.select(<all the arguments>).   
>> There was a great emphasis on using regular select() constructs with 
>> mappers, and queries were always done in terms of Table objects, not classes 
>> - the idea of MyClass.foo=='bar' was introduced much later, even though this 
>> Table access was somewhat convenient via the ".c." attribute on classes (so 
>> MyClass.c.foo == 'bar' - this is actually completely different than what 
>> MyClass.foo is today).   Overall there was a lot of SQLObject influencing 
>> how things were done.
>> 
>> If I were doing this again today, I might try to have a select() object that 
>> somehow morphs more smoothly into an ORM-centric object - though this would 
>> be challenging as the ORM Query does a lot of things with it's state before 
>> generating a much more rudimentary select() construct.  The Query has a lot 
>> of opinions about things that the select() does not, even though our Query 
>> is still much closer to SQL than that of any other ORM.   I have thought 
>> recently about this subject.   But each time I try to consider there being 
>> just one construct that can move between them, the details of how that would 
>> work become apparently very hazy and unclear - it would take a lot of 
>> thinking.   Still could be worth it, though.
>> 
>> So as things turned out in 0.5, 0.6 and onwards, we've made the Query object 
>> be the "main" thing you work with when using the ORM.   There's very little 
>> emphasis on using a select() construct directly except when embedding a 
>> subquery into an existing Query - but even then we have you build up the 
>> select() using the Query interface.  The select() and Query still play 
>> together pretty well but we try to say when you're actually building 
>> select() constructs directly, you're working in a "schema-centric" fashion 
>> as opposed to a "domain-centric" fashion.    If you're considering your 
>> query in terms of tables, and you want plain tuples back, that leans towards 
>> select([]), and if you're querying in terms of the object model, you use 
>> Query and can get back any combination of objects/tuples.    
>> I know it's not 100% "pure" but it does seem to work out pretty well.
>> 
>> 
>> 
>> 
>> 
>> On Apr 12, 2012, at 2:06 PM, jo wrote:
>> 
>>  
>>> Hi all,
>>> 
>>> I'm sorry for this simple question.
>>> What's the difference between query and select ?
>>> are they interchangeable?
>>> which of the two, it is best to use?
>>> 
>>> -------> print(session.query(Azienda.c.data_inizio).limit(1))
>>> SELECT azienda_data_inizio
>>> FROM (SELECT azienda.data_inizio AS azienda_data_inizio
>>> FROM azienda)
>>> WHERE ROWNUM <= :ROWNUM_1
>>> 
>>> 
>>> -------> print(select([Azienda.c.data_inizio]).limit(1))
>>> SELECT data_inizio
>>> FROM (SELECT azienda.data_inizio AS data_inizio
>>> FROM azienda)
>>> WHERE ROWNUM <= :ROWNUM_1
>>> 
>>> 
>>> j
>>> 
>>> -- 
>>> You received this message because you are subscribed to the Google Groups 
>>> "sqlalchemy" group.
>>> To post to this group, send email to sqlalchemy@googlegroups.com.
>>> To unsubscribe from this group, send email to 
>>> sqlalchemy+unsubscr...@googlegroups.com.
>>> For more options, visit this group at 
>>> http://groups.google.com/group/sqlalchemy?hl=en.
>>> 
>>>    
>> 
>>  
> 
> 
> -- 
> Jose Soares                              _/_/  Sferacarta Net                 
>                  Via Bazzanese 69                       _/_/     _/_/_/
> 40033 Casalecchio di Reno             _/_/   _/_/  _/_/
> Bologna - Italy                      _/_/   _/_/  _/_/
> Ph  +39051591054              _/_/  _/_/   _/_/  _/_/
> fax +390516131537            _/_/  _/_/   _/_/  _/_/
> web:www.sferacarta.com        _/_/_/       _/_/_/
> 
> Le informazioni contenute nella presente mail ed in ogni eventuale file 
> allegato sono riservate e, comunque, destinate esclusivamente alla persona o 
> ente sopraindicati, ai sensi del decreto legislativo 30 giugno 2003, n. 196. 
> La diffusione, distribuzione e/o copiatura della mail trasmessa, da parte di 
> qualsiasi soggetto diverso dal destinatario, sono vietate. La correttezza, 
> l’integrità e la sicurezza della presente mail non possono essere garantite. 
> Se avete ricevuto questa mail per errore, Vi preghiamo di contattarci 
> immediatamente e di eliminarla. Grazie.
> 
> This communication is intended only for use by the addressee, pursuant to 
> legislative decree 30 June 2003, n. 196. It may contain confidential or 
> privileged information. You should not copy or use it to disclose its 
> contents to any other person. Transmission cannot be guaranteed to be 
> error-free, complete and secure. If you are not the intended recipient and 
> receive this communication unintentionally, please inform us immediately and 
> then delete this message from your system. Thank you.
> 
> -- 
> You received this message because you are subscribed to the Google Groups 
> "sqlalchemy" group.
> To post to this group, send email to sqlalchemy@googlegroups.com.
> To unsubscribe from this group, send email to 
> sqlalchemy+unsubscr...@googlegroups.com.
> For more options, visit this group at 
> http://groups.google.com/group/sqlalchemy?hl=en.
> 

-- 
You received this message because you are subscribed to the Google Groups 
"sqlalchemy" group.
To post to this group, send email to sqlalchemy@googlegroups.com.
To unsubscribe from this group, send email to 
sqlalchemy+unsubscr...@googlegroups.com.
For more options, visit this group at 
http://groups.google.com/group/sqlalchemy?hl=en.

Reply via email to