Базовая сущность с конкретным наследованием

Я хочу иметь базовую сущность с полем 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)
)

Вопросы:

  1. Как избежать создания таблицы для базовой сущности? - решено: using_options(abstract = True)
  2. Почему поле deleted нет в созданных таблицах? - это решено - я забыл положить его в Field
  3. Я хочу избежать ввода в каждом подклассе 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))
)
Другие вопросы по тегам