【问题标题】:Base entity with concrete inheritance具有具体继承的基础实体
【发布时间】:2012-06-16 19:17:49
【问题描述】:

我想要一个带有字段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'),但仍然有“具体继承”。有没有办法将其设为所有子类的默认值?

【问题讨论】:

    标签: python sqlalchemy python-elixir


    【解决方案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))
    )
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-10-28
      • 1970-01-01
      • 2023-03-04
      • 1970-01-01
      相关资源
      最近更新 更多