Thanks for your reply! I always thought that "func.package.name(..)" would be the same as calling "getattr(func, 'package.name')(..)", but now I understand how the class _FunctionGenerator works. :)
Because I only have the function name as string, I can't use the "func.xy" construct. I am now manually constructing Function objects, which works fine. On Thu, May 6, 2010 at 4:52 PM, Michael Bayer <mike...@zzzcomputing.com>wrote: > > On May 6, 2010, at 7:47 AM, Tobias wrote: > > > By accident I found out that the SQLAlchemy Function class has an > > attribute 'packagenames'. If you set this attribute manually, the > > query is executed properly. > > > > It would be great if this attribute is filled automatically by > > splitting the function name on every dot. > > > it is, if you say func.MDSYS.SDO_GEOMETRY('POINT(0 0)'). The tokens > before the final one are sent into "packagenames". see the third example at > > http://www.sqlalchemy.org/docs/reference/sqlalchemy/expressions.html#sqlalchemy.sql.expression.func. > > > > > > > > >>>> session.query(Function('SDO_GEOMETRY', 'POINT(0 0)', 4326, > packagenames=['MDSYS'])).select_from(table('dual')).first() > > 2010-05-06 13:35:31,546 INFO sqlalchemy.engine.base.Engine.0x...a8ac > > SELECT "SDO_GEOMETRY_1" > > FROM (SELECT "SDO_GEOMETRY_1", ROWNUM AS ora_rn > > FROM (SELECT MDSYS.SDO_GEOMETRY(:SDO_GEOMETRY_2, :SDO_GEOMETRY_3) AS > > "SDO_GEOMETRY_1" > > FROM dual) > > WHERE ROWNUM <= :ROWNUM_1) > > WHERE ora_rn > :ora_rn_1 > > 2010-05-06 13:35:31,547 INFO sqlalchemy.engine.base.Engine.0x...a8ac > > {'ROWNUM_1': 1, 'SDO_GEOMETRY_3': 4326, 'SDO_GEOMETRY_2': 'POINT(0 > > 0)', 'ora_rn_1': 0} > > (<cx_Oracle.OBJECT object at 0x8c11da0>,) > > > > On May 6, 10:37 am, Tobias <tobias.sauerw...@camptocamp.com> wrote: > >> Hi, > >> > >> I am using SQLAlchemy 0.6 together with cx_Oracle and I am receiving > >> an error message when a database function is inside a package and has > >> to be called like "package.functionname". > >> > >> For example the following query can reproduce the error (beside that > >> this query makes not much sense): > >> > >> >>> session.query(table('spots', > >> column('spot_location'))).filter(getattr(func, 'MDSYS.SDO_GEOMETRY') > >> ('POINT(0 0)', 4326) == text('spot_location')).first() > >> > >> The output is: > >> > >> 2010-05-06 10:29:45,530 INFO sqlalchemy.engine.base.Engine.0x...a8ac > >> SELECT spots_spot_location > >> FROM (SELECT spots_spot_location, ROWNUM AS ora_rn > >> FROM (SELECT spots.spot_location AS spots_spot_location > >> FROM spots > >> WHERE > >> MDSYS.SDO_GEOMETRY(:"MDSYS.SDO_GEOMETRY_1", :"MDSYS.SDO_GEOMETRY_2") = > >> spot_location) > >> WHERE ROWNUM <= :ROWNUM_1) > >> WHERE ora_rn > :ora_rn_1 > >> 2010-05-06 10:29:45,530 INFO sqlalchemy.engine.base.Engine.0x...a8ac > >> {'ora_rn_1': 0, 'ROWNUM_1': 1, u'"MDSYS.SDO_GEOMETRY_2"': 4326, > >> u'"MDSYS.SDO_GEOMETRY_1"': 'POINT(0 0)'} > >> Traceback (most recent call last): > >> File "<stdin>", line 1, in <module> > >> > >> [..] > >> > >> File .../env/lib/python2.6/site-packages/SQLAlchemy-0.6.0-py2.6.egg/ > >> sqlalchemy/engine/default.py", line 277, in do_execute > >> cursor.execute(statement, parameters) > >> sqlalchemy.exc.DatabaseError: (DatabaseError) ORA-01036: illegal > >> variable name/number > >> 'SELECT spots_spot_location \nFROM (SELECT spots_spot_location, > >> ROWNUM AS ora_rn \nFROM (SELECT spots.spot_location AS > >> spots_spot_location \nFROM spots \nWHERE > >> MDSYS.SDO_GEOMETRY(:"MDSYS.SDO_GEOMETRY_1", :"MDSYS.SDO_GEOMETRY_2") = > >> spot_location) \nWHERE ROWNUM <= :ROWNUM_1) \nWHERE ora_rn> :ora_rn_1' > {'ora_rn_1': 0, 'ROWNUM_1': 1, u'"MDSYS.SDO_GEOMETRY_2"': > >> > >> 4326, u'"MDSYS.SDO_GEOMETRY_1"': 'POINT(0 0)'} > >> > >> Something is wrong about the escaping. > >> > >> Thanks, > >> Tobias > >> > >> -- > >> You received this message because you are subscribed to the Google > Groups "sqlalchemy" group. > >> To post to this group, send email to sqlalch...@googlegroups.com. > >> To unsubscribe from this group, send email to > sqlalchemy+unsubscr...@googlegroups.com<sqlalchemy%2bunsubscr...@googlegroups.com> > . > >> For more options, visit this group athttp:// > 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 sqlalch...@googlegroups.com. > > To unsubscribe from this group, send email to > sqlalchemy+unsubscr...@googlegroups.com<sqlalchemy%2bunsubscr...@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 sqlalch...@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.