Thanks Michael, much appreciated.  I realized that this afternoon when I 
tried executing the statement and it worked, verified also with my 
engine(echo=True).

Great job on the ORM!

On Tuesday, May 15, 2012 1:31:44 PM UTC-7, Michael Bayer wrote:
>
> When you say "print statement", you are not using the oracle dialect, it 
> uses a default dialect.  To compile against a specific dialect it's like 
> query.statement.compile(dialect=oracle.dialect()) where oracle dialect is 
> from sqlalchemy.dialects import oracle.
>
> Sent from my iPhone
>
> On May 14, 2012, at 5:33 PM, Karl wrote:
>
> Background:  I'm recently new to SQLA but not new to data access 
> layers/object relational mapping.
>
> Problem:  I'm trying to alias a subquery in sqlachemy in Oracle but the AS 
> keyword gets added to the alias, which is not Oracle compatible.
> Oracle 10.02.03
> cx_Oracle 5.0.4
> sqlalchemy: 0.7.5
>
> Given a simple table:
>
> foo = Table('foo', metadata,
> Column('id',
> types.Integer,
> nullable=False,
> primary_key=True),
> Column('name_txt', 
> types.String(32),
> nullable=True,
> primary_key=False),
> )
> class Foo(CustomBase):
> __table__ = foo
> __fields__ = ["id", "name"]
> id = foo.c.id
> name = foo.c.name_txt
>
> from sqlalchemy import create_engine
> from sqlalchemy.orm import sessionmaker
> engine = 
> create_engine('oracle+cx_oracle://tc:tc@opc',echo=True,use_ansi=False)  # 
> tried both True and False
> Session = sessionmaker(bind=engine)
> session = Session()
>
> f = session.query(Foo).subquery().alias('f')
> print session.query(f)
> SELECT f.name_txt AS f_name_txt, f.id AS f_id 
> FROM (SELECT foo.name_txt AS name_txt, foo.id AS id 
> FROM foo) *AS* f
>
> What I need the expression to be is 
> SELECT f.name_txt AS f_name_txt, f.id AS f_id 
> FROM (SELECT foo.name_txt AS name_txt, foo.id AS id 
> FROM foo)  f  -- note the lack of the AS keyword
>
> I've searched the forums (it's difficult to search on "AS") and tried 
> varying the ansi level of the connection and started digging around, the 
> closest I could see was a comment in the oracle dialect:
> /usr/share/pyshared/sqlalchemy/dialects/oracle/base.py line 481:
>     def visit_alias(self, alias, asfrom=False, ashint=False, **kwargs):
>         """Oracle doesn't like ``FROM table AS alias``.  Is the AS 
> standard SQL??"""
> ...
> and in the class itself:
> print sqlalchemy.sql.expression.alias.__doc__
> #<snip>
>     For :func:`.select` objects, the effect is that of creating a named
>     subquery, i.e. ``(select ...) AS aliasname``.
> #</snip>
>
> Can anyone suggest where I've strayed?  Configuration configuration, bug, 
> feature?
>
> -- 
> You received this message because you are subscribed to the Google Groups 
> "sqlalchemy" group.
> To view this discussion on the web visit 
> https://groups.google.com/d/msg/sqlalchemy/-/AVgvNh_iBc8J.
> 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 view this discussion on the web visit 
https://groups.google.com/d/msg/sqlalchemy/-/JjbT8CACHQ8J.
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