Я использую 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 предназначен только для связи двух других таблиц.