简体   繁体   中英

SQLAlchemy table reflection with Sybase

When I try to reflect all tables in my Sybase DB

metadata = MetaData()
metadata.reflect(bind=engine)

SQLAlchemy runs the following query:

SELECT o.name AS name
FROM sysobjects o JOIN sysusers u ON o.uid = u.uid
WHERE u.name = @schema_name
AND o.type = 'U'

I then try to print the contents of metadata.tables, and this yields nothing.

I've tried creating an individual Table object and using the autoload=True option, but this yields a TableDoesNotExist error.

accounts = Table('Accounts', metadata, autoload=True, autoload_with=engine)

I looked into this query and it seems the @schema_name is becoming my username, and none of the tables which come from "sysobjects" appear to have a "name" attribute set to my username. They are all set to "dbo", which means the Database Owner, and thus the query returns nothing, and nothing is ever reflected. Is there any way to force SQLAlchemy to use something different as schema_name?

I've found two questions regarding table reflection using the Sybase dialect. Both were asked 6 years ago and seem to indicate that table reflection with Sybase was unsupported. However, it seems that SQLAlchemy tries to run a genuine sybase reflection query as above, so I don't think this is the case now.

I've solved this by setting the schema parameter on the MetaData object. I had to set it to dbo . You can also specify this in the reflect function.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM