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.
>> 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.
> 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.

Reply via email to