SQLAlchemy Automap не создает класс для таблиц без первичного ключа

Я использую SQL Alchemy v (0.9.1), который имеет функциональность automap. Это позволяет мне автоматически создавать классы и отношения. http://docs.sqlalchemy.org/en/rel_0_9/orm/extensions/automap.html

Проблема, с которой я столкнулась, заключается в том, что при использовании automap_base я вижу, что отображаются не все таблицы, доступные в списке metadata.tables.

При подготовке нет ошибок, за исключением того, что я не могу получить доступ к классу (например, Base.classes.Example_Table) из базы после вызова automap_base()

from sqlalchemy import create_engine, MetaData
from sqlalchemy.orm import create_session

from sqlalchemy.ext.automap import automap_base

engine = create_engine("mysql+mysqldb://")

Base = automap_base()
Base.prepare(engine, reflect = True)

session = create_session(bind = engine)

Затем я запускаю, чтобы найти, что классы не существуют для всех таблиц в метаданных (я не использовал только аргумент = [] в метаданных)

for mappedclass in Base.classes:
    print mappedclass

for mdtable in metadata.tables:
    print mdtable

Только чтобы найти, что Example_Table (со следующим синтаксисом create) не имеет класса

    CREATE TABLE `Example_Table` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT,
  `attributeType` varchar(255) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=3290719 DEFAULT CHARSET=latin1

то есть. Base.class.Example_Table возвращает следующую ошибку

    ---------------------------------------------------------------------------
AttributeError                            Traceback (most recent call last)
<ipython-input-15-94492ae1b8ba> in <module>()
      7 type(metadata.tables)
      8 
----> 9 Base.classes.Example_Table

/usr/local/lib/python2.7/site-packages/sqlalchemy/util/_collections.pyc in __getattr__(self, key)
    172             return self._data[key]
    173         except KeyError:
--> 174             raise AttributeError(key)
    175 
    176     def __contains__(self, key):

AttributeError: Example_Table

Я не думаю, что эта проблема возникает, потому что мое имя Example_Table имеет в ней символ подчеркивания.

Я думаю, проблема связана с тем, что мой Example_Table не имеет первичного ключа. Example_Table предназначен только для связи двух других таблиц.

Ответ 1

Выяснил это, расчесывая ссылку/рефреймируя проблему.

В случае, если это помогает кому-то другому -

Поскольку ORM SQLAlchemy основана на модели идентификационной карты, нельзя сопоставить (или автоматически) таблицу, у которой нет первичного ключа. Необходимо указать произвольный первичный ключ.

http://docs.sqlalchemy.org/en/latest/faq/ormconfiguration.html#how-do-i-map-a-table-that-has-no-primary-key