Добавить импортированные классы в метаданные - PullRequest
1 голос
/ 08 февраля 2012

Все,

Я импортирую группу классов для sqlalchemy из отдельного файла.Они определяют таблицы в моей БД (унаследованные от Declarative_base ()) и изначально находились в том же файле, что и мой движок и создание метаданных.

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

Я реорганизовал их в свой собственный файл, и внезапно метаданные не нашли их автоматически. Перейдя по этой ссылке , я обнаружил, что это потому, что мой основной файл объявляет base:

from tables import address, statements
Base = declarative_base()
metadata = MetaData()
Base.metadata.create_all()

И мой файл таблиц тоже:

Base = declarative_base()
class address(Base):
    ...

Итак, какНасколько я могу судить, они получают отдельные «базы», ​​поэтому метаданные не могут найти и создать объявленные таблицы.Я немного погуглил, и похоже, что это возможно, но нет очевидного способа сделать это.

Как импортировать таблицы, определенные в отдельном файле?

Обновление:

Я пробовал это, и это вроде функций.

В файле таблиц объявите базу для импортируемых классов таблиц:

from sqlalchemy.ext.declarative import declarative_base
Base = declarative_base()

Затем в основном файле импортируйте существующую базу и передайте ее метаданные в новую базу:

from sqlalchemy.ext.declarative import declarative_base
from tables import Base as tableBase
Base = declarative_base(metadata=tableBase.metadata)

После еще нескольких испытаний я обнаружил, что этот подход оставляет важную информацию.Я вернулся к одному файлу со всем в нем, так как он работает правильно.Я оставлю вопрос открытым на тот случай, если кто-то может придумать ответ, который работает правильно.Или, альтернативно, укажите на соответствующие документы.

...