On 10/5/15 9:28 AM, Massimiliano della Rovere wrote:
I've found a solution to the reflect problem, but, given my limited knowledge of SQLAlchemy, I do not know how it performs and whether there is better one.

that was the workaround I was going to suggest, so stick with that until 1.0.9 comes out.





from sqlalchemy import create_engine, event, MetaData
from sqlalchemy.schema import SchemaItem, Table
from sqlalchemy.sql.elements import quoted_name
engine = create_engine("oracle://MYSCHEMA:[email protected]:1521/XE")
schemaname = "MYSCHEMA"
metadata = MetaData(
    bind=engine,
    schema=schemaname,
    reflect=True,
    quote_schema=True)


def fix_case(target, parent):
    if type(parent) == MetaData:
        (name, dest) = target.name, target
    else:
        (name, dest) = parent.name, parent
    if name.isupper():
        name = name.lower()
    setattr(dest, "name", quoted_name(name, quote=True))

event.listen(SchemaItem, "after_parent_attach" , fix_case)

tablename = "y"
Table(
    quoted_name(tablename, quote=True),
    metadata,
    schema=schemaname,
    autoload=True,
    extend_existing=True)



Il giorno venerdì 2 ottobre 2015 17:12:12 UTC+2, Michael Bayer ha scritto:



    On 10/2/15 9:44 AM, Massimiliano della Rovere wrote:
    cx-Oracle==5.2
    SQLAlchemy==1.0.8

    I'm in the weird situation of dealing with an Oracle database
    with lowercase identifiers (they were created by another software
    that escapes always table/schema/index identifiers).

    I get a "NoSuchTableError" whenever I issue a

    MetaData(bind=engine, reflect=True)

    or a

    Table(
        "tablename",
        metadata,
        schema="SCHEMA",
        autoload=True,
        extend_existing=True,
        quote=True)

    statement and it doesn't change whether the "quote" parameter is
    added or not.

    Is there a way to make SQLAlchemy escape identifiers always,
    without case mangling?

    you get NoSuchTable on straight MetaData(reflect=True)?    Please
    post a bug report with the full table def I'd have to test that.

    using quoted_name will definitely quote the value:
    
http://docs.sqlalchemy.org/en/rel_1_0/core/sqlelement.html?highlight=quoted#sqlalchemy.sql.elements.quoted_name
    
<http://docs.sqlalchemy.org/en/rel_1_0/core/sqlelement.html?highlight=quoted#sqlalchemy.sql.elements.quoted_name>







    Thanks
-- You received this message because you are subscribed to the
    Google Groups "sqlalchemy" group.
    To unsubscribe from this group and stop receiving emails from it,
    send an email to [email protected] <javascript:>.
    To post to this group, send email to [email protected]
    <javascript:>.
    Visit this group at http://groups.google.com/group/sqlalchemy
    <http://groups.google.com/group/sqlalchemy>.
    For more options, visit https://groups.google.com/d/optout
    <https://groups.google.com/d/optout>.

--
You received this message because you are subscribed to the Google Groups "sqlalchemy" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected] <mailto:[email protected]>. To post to this group, send email to [email protected] <mailto:[email protected]>.
Visit this group at http://groups.google.com/group/sqlalchemy.
For more options, visit https://groups.google.com/d/optout.

--
You received this message because you are subscribed to the Google Groups 
"sqlalchemy" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To post to this group, send email to [email protected].
Visit this group at http://groups.google.com/group/sqlalchemy.
For more options, visit https://groups.google.com/d/optout.

Reply via email to