Каковы соглашения об абстрактной базовой иерархии в SQLAlchemy 2.0?Python

Программы на Python
Ответить
Anonymous
 Каковы соглашения об абстрактной базовой иерархии в SQLAlchemy 2.0?

Сообщение Anonymous »

Я понимаю, что в SQLAlchemy 2.0 флаг __abstract__ можно использовать для создания абстрактных базовых классов, которые сами не сопоставляются с таблицей, но могут быть унаследованы другими классами для создания реальных сопоставленных таблиц. Я также знаю, что объект метаданных можно использовать для организации таблиц и управления тем, к какой схеме или базе данных они принадлежат.
Из документации:

Код: Выделить всё

class Base(DeclarativeBase):
pass

class DefaultBase(Base):
__abstract__ = True
metadata = MetaData()

class OtherBase(Base):
__abstract__ = True
metadata = MetaData()
Выше классы, которые наследуются от DefaultBase, будут использовать одни метаданные в качестве реестра таблиц, а те, которые наследуются от OtherBase< /code> будет использовать другой. Сами таблицы затем могут быть созданы, возможно, в отдельных базах данных.

Мне любопытно, когда описанный выше подход должен быть предпочтительнее создания двух независимых унаследованных абстрактных баз. непосредственно из DeclarativeBase.

Код: Выделить всё

class Base1(DeclarativeBase):
__abstract__ = True
metadata = MetaData()

class Base2(DeclarativeBase):
__abstract__ = True
metadata = MetaData()
Я понимаю, что программно эти два подхода на практике идентичны, если только общая база не должна была определять некоторое поведение или атрибуты, которые будут использоваться двумя унаследованными абстрактными базами. Есть ли что-то еще, что, вероятно, следует рассмотреть?
Вторая часть этого вопроса касается использования самого атрибута __abstract__. В документах указано:

Код: Выделить всё

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

Когда дело доходит до базовых классов, как вышеизложенное, что именно меняет Abstract? Если я правильно понимаю, сопоставление не создается, если класс не является подклассом Base и не определяет столбцы и __tablename__? Итак, существует ли здесь фактическое ограничение __abstract__?

Подробнее здесь: https://stackoverflow.com/questions/791 ... lchemy-2-0
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»