#python #sqlalchemy #orm #metaclass
Вопрос:
Я пытаюсь эмулировать декларативное базовое поведение SQLAlchemy. Что я хотел бы сделать, так это определить набор моделей, которые наследуются от базового класса, а затем выполнить что-то вроде Base.meta.create_all
инициализации некоторых таблиц, индекса и т. Д.
Я сделал так, чтобы мой пользовательский Base
класс с metadata
аргументом использовал BaseMeta
класс, который создает некоторые сопоставления, следуя этому примеру.
Дело в том, что SQLAlchemy имеет этот класс метаданных внутри базового класса, который содержит такие методы, как create_all
и drop_all
и каким-то образом считывает все модели, унаследованные от Base
. Я немного поиграл Base.__subclasses__()
, и это вроде как работает, но это не имеет ничего общего с этим MetaData
классом, на который есть все Table
ссылки.
Пожалуйста, обратите внимание, что я не спрашиваю, как использовать SQLAlchemy, я пытаюсь создать пользовательский клон, подобный SQLAlchemy, просто чтобы научиться.