2016-11-11 48 views
0

我有以下表蒸馏器:强制值唯一横跨两个值

mysql> describe table; 
+----------------+-------------+------+-----+-------------------+----------------+ 
| Field   | Type  | Null | Key | Default   | Extra   | 
+----------------+-------------+------+-----+-------------------+----------------+ 
| id    | int(11)  | NO | PRI | NULL    | auto_increment | 
| value1   | varchar(2) | NO | MUL | NULL    |    | 
| value2   | varchar(2) | YES |  | NULL    |    | 
| value3   | varchar(10) | YES |  | NULL    |    | 
+----------------+-------------+------+-----+-------------------+----------------+ 

我试图创建一个蒸馏器规则,其中value1value2一起在表中创建一个关键。例如,值

(id=1, value1="BA", value2="CN", value3="hello") 
(id=2, value1="BA", value2="CN", value3="goodbye") 

是相同的(value1value2匹配),但是

(id=1, value1="BA", value2="CN", value3="hello") 
(id=2, value1="BA", value2="US", value3="goodbye") 

不是。

什么是alembic upgrade()downgrade()代码是这样的,使用的是alembic.op对象?

回答

0

假设你的模型具有以下UniqueConstraint的定义:

class MyTable(Base): 
    __tablename__ = 'mytable' 

    id = Column(Integer, primary_key=True) 
    value1 = Column(String(2), nullable=False) 
    value2 = Column(String(2)) 
    value3 = Column(String(10)) 

    __table_args__ = (
     UniqueConstraint(value1, value2, name="mytable__uc_value1_value2"), 
    ) 

蒸馏器版本的def upgrade():然后会为了创造这种独特的约束包含以下命令:

def upgrade(): 
    op.create_unique_constraint(
     "mytable__uc_value1_value2", "mytable", ["value1", "value2"] 
    )