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 [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
-~----------~----~----~----~------~----~------~--~---