2015-04-27 3 views
4

Я следую документации sqlalchemy для отображения таблиц базы данных с использованием automap: http://docs.sqlalchemy.org/en/latest/orm/extensions/automap.html#generating-mappings-from-an-existing-metadata.Automap отражает таблицы в схеме postgres с sqlalchemy

Когда я не конкретная схема, и Postgres использует схему по умолчанию public, это работает, как ожидалось, и я нахожу имена моих таблиц:

>>> m = MetaData() 
>>> b = automap_base(bind=engine, metadata=m) 
>>> b.prepare(engine, reflect=True) 
>>> b.classes.keys() 
['ads', 'spatial_ref_sys', 'income'] 

Но когда я конкретная явная схема, У меня нет доступа к таблицам в Base.classes.

>>> m = MetaData(schema='geography') 
>>> b = automap_base(bind=engine, metadata=m) 
>>> b.prepare(engine, reflect=True) 
>>> b.classes.keys() 
[] 

метаданные отражены правильно, хотя:

>>> b.metadata.tables 
immutabledict({geography.usa_cbsa_centroids': Table('usa_cbsa_centroids', MetaData(bind=Engine(postgresql://asteroids:***@localhost:5432/asteroids)), Column('GEOID', VARCHAR(length=5), table=<u 
sa_cbsa_centroids>, nullable=False), ...}) 

Обрати внимание, что таблицы и столбцы известны только во время выполнения.

ответ

6

Ответ заключается в том, что для таблиц базы данных в SQLAlchemy требуется первичный ключ, а в моей таблице его нет. На этой странице есть дополнительная информация: http://docs.sqlalchemy.org/en/latest/faq/ormconfiguration.html#how-do-i-map-a-table-that-has-no-primary-key.

SQLAlchemy ОРМ, для того, чтобы привязать к конкретной таблице, потребности там быть по крайней мере один столбец обозначен как столбец первичного ключа; многоколоночные, т.е. композитные, первичные ключи, конечно же, вполне допустимы . Эти столбцы не обязательно должны быть известны в базе данных как столбцы первичного ключа, хотя это хорошая идея, что они . Нужно только, чтобы столбцы вели себя как первичный ключ , например. как уникальный и не обнуляемый идентификатор строки.

Благодаря Michael Bayer для ответа на это в списке рассылки SQLAlchemy: https://groups.google.com/forum/#!topic/sqlalchemy/8F2tPkpR4bE

Смежные вопросы