失敗例
SQLAlchemy Migrateで、複合ユニークキーを作成しようとしたがうまくいかなかった。
以下はカラムa
,b
,c
に対して複合ユニークキーを作成しようとした例。
from sqlalchemy import *
from migrate import *
from sqlalchemy.dialects.mysql import BIGINT, INTEGER, VARCHAR
meta = MetaData()
mytable = Table(
'ng_images', meta,
Column('id', BIGINT(unsigned=True), primary_key=True, nullable=False, autoincrement=True),
Column('a', INTEGER(unsigned=True), unique=True),
Column('b', INTEGER(unsigned=True), unique=True),
Column('c', VARCHAR(60), unique=True)
)
解決策
UniqueConstraint
を使うことで解決できた。
from sqlalchemy import *
from migrate import *
from sqlalchemy.dialects.mysql import BIGINT, INTEGER, VARCHAR
from migrate.changeset.constraint import UniqueConstraint
meta = MetaData()
mytable = Table(
'ng_images', meta,
Column('id', BIGINT(unsigned=True), primary_key=True, nullable=False, autoincrement=True),
Column('a', INTEGER(unsigned=True), unique=True),
Column('b', INTEGER(unsigned=True), unique=True),
Column('c', VARCHAR(60), unique=True)
)
UniqueConstraint('a', 'b', 'c', name="unique_idx_mytable", table=mytable)