Базовая сущность с конкретным наследованием
Я хочу иметь базовую сущность с полем deleted
который отмечает удаленную запись. И у меня есть 2 подкласса, каждый из которых имеет свою собственную таблицу со всеми своими столбцами:
from elixir import *
from sqlalchemy import create_engine
class Catalog(Entity):
using_options(inheritance='concrete')
deleted = Boolean
class Contact(Catalog):
using_options(inheritance='concrete')
name = Field(String(60))
class Location(Catalog):
using_options(inheritance='concrete')
name = Field(String(100))
setup_all()
metadata.bind = create_engine('sqlite:///', echo=True)
metadata.create_all()
И результат:
CREATE TABLE __main___catalog (
id INTEGER NOT NULL,
PRIMARY KEY (id)
)
CREATE TABLE __main___contact (
id INTEGER NOT NULL,
name VARCHAR(60),
PRIMARY KEY (id)
)
CREATE TABLE __main___location (
id INTEGER NOT NULL,
name VARCHAR(100),
PRIMARY KEY (id)
)
Вопросы:
-
Как избежать создания таблицы для базовой сущности?- решено:using_options(abstract = True)
-
Почему полеdeleted
нет в созданных таблицах?- это решено - я забыл положить его вField
- Я хочу избежать ввода в каждом подклассе
using_options(inheritance='concrete')
но все же есть "конкретное наследство". Есть ли способ сделать его по умолчанию для всех подклассов?
1 ответ
Это работает:
class Catalog(Entity):
deleted = Field(Boolean)
using_options(abstract = True, inheritance = 'concrete')
class Contact(Catalog):
name = Field(String(60))
class Location(Catalog):
name = Field(String(100))
и создает следующие таблицы:
CREATE TABLE __main___contact (
id INTEGER NOT NULL,
deleted BOOLEAN,
name VARCHAR(60),
PRIMARY KEY (id),
CHECK (deleted IN (0, 1))
)
CREATE TABLE __main___location (
id INTEGER NOT NULL,
deleted BOOLEAN,
name VARCHAR(100),
PRIMARY KEY (id),
CHECK (deleted IN (0, 1))
)