On Apr 9, 2011, at 6:15 PM, Anoop wrote:
>
> HI Michael ,
> Thanks for your reply,this is my table creation query without any
> quoted variables
>
> CREATE TABLE AUTOLOAD_TEST
> (
> ID INTEGER
> , FIRST_NAME VARCHAR(20)
> );
>
> this is my connect_sqlalchemy.py script
> ++++++++++++++++++++++++++++++++++++++++++
>
> from sqlalchemy import MetaData,create_engine,Table
> engine = create_engine("oracle+cx_oracle://anoop:asdfgh@xe" )
> meta = MetaData(engine)
> tbl_autoload_test=Table('autoload_test', meta, autoload=True,
> autoload_with=engine, schema=None)
> print tbl_autoload_test.columns.keys()
> ++++++++++++++++++++++++++++++++++++++++++
>
> When I run this script
> (myenv)anoop@AGLAP:~/Example/sqlalchemy$ python connect_sqlalchemy.py
> [u'id', u'first_name'] #Here I got column names in lower case
>
>
> if name.upper() == name and \
> not
> self.identifier_preparer._requires_quotes(name.lower()):
> return name.lower()
> else:
> return name
> if name.upper() == name and \
> not self.identifier_preparer._requires_quotes(name): #
> this is my change not converted into lower when calling
> return name.lower()
> else:
> return name
>
> [u'ID', u'FIRST_NAME'] # Here output is in Capital letters not
>
> Did you got my point ?
I'm assuming what you're looking for here is columns.keys() to be converted to
uppercase. To be honest, to suit your use case, you should just say my_keys =
[k.upper() for k in table.columns.keys() if k.lower() == k]. Because you
shouldn't be thinking of those names as upper case *or* lowercase - they are
case insensitive. SQLA uses all lower case to indicate case insensitive,
Oracle uses all uppercase. You can emit the statement "select FIRST_NAME from
autoload_test" or "select first_name from autoload_test" on your oracle
database and you get the same result.
With your change, we basically treat Oracle names as UPPERCASE for case
insensitive, the way Oracle itself does. Which is the reverse of the usage
contract that SQLAlchemy provides for all other backends. Tables now have to
be referenced as table.c.SOME_COLUMN, mapped classes will look like
MyClass.FIRST_NAME, etc. If I make your change, symmetrically or not
versus denormalize_name, there are dozens of test failures, illustrated here:
http://paste.pocoo.org/show/368744/ . All the tests in test_reflection are
normally fully cross-platform compatible. If we make an arbitrary reversal of
SQLAlchemy's case insensitive convention in the case of Oracle, virtually all
tests regarding reflection do not act as expected.
--
You received this message because you are subscribed to the Google Groups
"sqlalchemy" group.
To post to this group, send email to [email protected].
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.