1

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')が、それでも「具体的な継承」があります。すべてのサブクラスのデフォルトにする方法はありますか?
4

1 に答える 1

0

これは機能します:

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))
)
于 2012-06-17T11:09:24.407 に答える