Все,
Я импортирую группу классов для 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)
После еще нескольких испытаний я обнаружил, что этот подход оставляет важную информацию.Я вернулся к одному файлу со всем в нем, так как он работает правильно.Я оставлю вопрос открытым на тот случай, если кто-то может придумать ответ, который работает правильно.Или, альтернативно, укажите на соответствующие документы.