Michael Bayer wrote:
> Eric Naeseth wrote:
>
> > SQLAlchemy seems to have an issue reflecting MySQL tables that have
> > foreign keys when the table being reflected is not in the database
> > specified in the connection string.
>
> > Let's say I'm working on an app to manage a database named "library",
> > but that I also need access to the tables in the "people" database on
> > the same MySQL server. This shouldn't be a problem, since the
> > SQLAlchemy's table type takes a "schema" keyword argument, so I do
> > something like the following:
>
> >     from sqlalchemy import *
> >     from sqlalchemy.orm import *
>
> >     engine = create_engine('mysql://localhost/library')
> >     metadata = MetaData(bind=engine)
> >     # ...
> >     table = Table('child', metadata, autoload=True, schema='people')
> >     # error raised: sqlalchemy.exceptions.NoSuchTableError: parent
>
> > The table "child" is using InnoDB, and it contains a column with a
> > foreign key constraint that refers to a column on the table "parent".
> > The problem is that SQLAlchemy is not resolving the table name
> > relative to the database in which the constraint occurs: it sees that
> > the constraint refers to a table called "parent", treats "parent" as
> > the full name, and as a result, looks for "parent" at "library.parent"
> > instead of "people.parent", resulting in a failure to autoload.
>
> its all dependent on what MySQL sends back.  Have you tried SQLA trunk
> since reflection has been enhanced there ?  also what version of MySQL ,
> as it can be version specific.

I'm sorry, I was using the version of SQLAlchemy provided by my
distribution, and didn't realize just how old it was (0.4.8).
SQLAlchemy 0.5.5 and trunk exhibit the correct behavior:

    engine = create_engine('mysql://localhost/library')
    metadata = MetaData(bind=engine)
    table = Table('child', metadata, autoload=True, schema='people')
    print metadata.tables.keys() # => ['people.child',
u'people.parent']

(For reference, I was using MySQL 5.0.75.)
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"sqlalchemy" group.
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