読者です 読者をやめる 読者になる 読者になる

DDLレベルでデフォルトに設定する

SQLAlchemy

SQLAlchemyでは、

t = Table('test', meta, 
    Column('mycolumn', Integer, default=0)
)

のように、テーブル定義でColumnのdefaultを設定しても、DDLレベルではデフォルト値を設定してくれない。

これを行うには、0.4系ではPassiveDefault0.5以降ではserver_defaultを使う。0.5でも、PassiveDefaultはdeprecatedになるが、しばらくは利用できる。

# SQLAlchemy 0.4
t = Table('test', meta, 
    Column('mycolumn', Integer, PassiveDefault("0"))
)
# SQLAlchemy 0.5
t = Table('test', meta, 
    Column('mycolumn', Integer, server_default="0")
)

ちなみに、PassiveDefault、server_defaultとも、カラムの型には文字列か、text()関数が返すTextClauseオブジェクトを渡さなくてはならない。上記の例では、Integer型カラムにデフォルトを設定しているが、PassiveDefault(0)ではエラーになるので、PassiveDefault("0")としている。