ok it works with literal() :-) Thanks On Wed, 2007-03-28 at 12:04 -0400, Michael Bayer wrote: > a few things here. > > first of all, if its an operator, you probably want to use op(): > > literal('foo').op('ANY')('bar') > > secondly, when you say "x" == <ClauseElement>, the __eq__() method in > Python that gets called on the clauseelement has no "reversed" > version. so its impossible for the ClauseElement on the right to > know that it should be on the left. > > you can work around this similarly to the previous example, by making > both sides a ClauseElement and saying: > > literal('foo') == func.any('bar') > > On Mar 28, 2007, at 10:42 AM, Julien Cigar wrote: > > > > > Hello Mike, > > > > This simple test illustrate the problem : > > > >>>> from sqlalchemy import func > >>>> print 'foo' == func.any('bar') > > any(:any) = :a_1 > > > > it should be :a_1 = any(:any) > > > > If you look at the PostgreSQL documentation, > > http://www.postgresql.org/docs/8.2/static/functions- > > comparisons.html#AEN14105 the syntax is: > > expression operator ANY (array expression) > > > > and not : > > ANY (array expression) expression operator > > > > Note the ANY can also be used with subselect (so it's not specific to > > the PostgreSQL array type) : > > http://www.postgresql.org/docs/8.2/static/functions- > > subquery.html#AEN13959 > > > > expression operator ANY (subquery) > > > > and in this case it's also incorrect : > > > >>>> print 'foo' == func.any(select) > > any(:any) = :a_1 > > > > (again it should be :a_1 = any(:any)) > > > > Regards, > > Julien > > > > On Tue, 2007-03-27 at 12:13 -0400, Michael Bayer wrote: > >> also we dont really have any direct support for python array types, > >> which seemed to be an element of your test. can you try a basic func > >> test without an array type being used ? > >> > >> > >> > >> On Mar 27, 2007, at 10:58 AM, Julien Cigar wrote: > >> > >>> > >>> The query is rather complicated: http://rafb.net/p/qyx3vA47.html > >>> The problem is at line 95 (the FIXME) > >>> > >>> Thanks > >>> > >>> Michael Bayer wrote: > >>>> On Mar 27, 2007, at 10:00 AM, Julien Cigar wrote: > >>>> > >>>> > >>>>> Hello, > >>>>> > >>>>> I'm using SQLAlchemy 0.3.5, and it seems that the func() output is > >>>>> broken with some functions. > >>>>> I use the ANY function of PostgreSQL with something like : > >>>>> func.any(q.c.habitats)==filter_habitat > >>>>> > >>>>> SQLAlchemy translates this in: > >>>>> WHERE any(habitats) = %(any)s, which is incorrect. > >>>>> > >>>> > >>>> > >>>>> For example: > >>>>> > >>>>> the result should be : > >>>>> iasdev=> select true as result where 'abc' = ANY(array['abc', > >>>>> 'def']); > >>>>> result > >>>>> -------- > >>>>> t > >>>>> > >>>>> where SQLAlchemy generates the query as : > >>>>> > >>>>> iasdev=> select true as result where ANY(array['abc', 'def']) = > >>>>> 'abc'; > >>>>> ERROR: syntax error at or near "ANY" at character 29 > >>>>> LINE 1: select true as result where ANY(array['abc', 'def']) = > >>>>> 'abc'... > >>>>> > >>>>> Is this a bug ? (or maybe it's possible to keep the order...) ? > >>>>> > >>>> > >>>> can i have some complete code examples please ? i dont understand > >>>> how your snippet would produce a full SELECT statement. the phrase > >>>> youve shown me translates exactly as specified, assuming > >>>> "filter_habitat" is ia non ClauseElement:: > >>>> > >>>> func.any(q.c.habitats)==filter_habitat > >>>> > >>>> should be: > >>>> > >>>> any(habitats) = %(any)s > >>>> > >>>> > >>>> > >>>> > >>>>> > >>>> > >>> > >>> > >>> -- > >>> Julien Cigar > >>> Belgian Biodiversity Platform > >>> http://www.biodiversity.be > >>> Universit� Libre de Bruxelles (ULB) > >>> Campus de la Plaine CP 257 > >>> B�timent NO, Bureau 4 N4 115C (Niveau 4) > >>> Boulevard du Triomphe, entr�e ULB 2 > >>> B-1050 Bruxelles > >>> office: [EMAIL PROTECTED] > >>> home: [EMAIL PROTECTED] > >>> biobel reference: http://biobel.biodiversity.be/biobel/person/ > >>> show/471 > >>> > >>> > >>>> > >> > >> > >>> > > -- > > Julien Cigar > > Belgian Biodiversity Platform > > http://www.biodiversity.be > > Universit� Libre de Bruxelles > > Campus de la Plaine CP 257 > > B�timent NO, Bureau 4 N4 115C (Niveau 4) > > Boulevard du Triomphe, entr�e ULB 2 > > B-1050 Bruxelles > > mail: [EMAIL PROTECTED] > > > > > > > > > > > -- Julien Cigar Belgian Biodiversity Platform http://www.biodiversity.be Université Libre de Bruxelles Campus de la Plaine CP 257 Bâtiment NO, Bureau 4 N4 115C (Niveau 4) Boulevard du Triomphe, entrée ULB 2 B-1050 Bruxelles mail: [EMAIL PROTECTED]
--~--~---------~--~----~------------~-------~--~----~ 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 [EMAIL PROTECTED] For more options, visit this group at http://groups.google.com/group/sqlalchemy?hl=en -~----------~----~----~----~------~----~------~--~---