【问题标题】:Alembic: Enforce value uniqueness across two valuesAlembic:跨两个值强制执行值唯一性
【发布时间】:2017-03-25 11:15:11
【问题描述】:

我有下表

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              |                |
+----------------+-------------+------+-----+-------------------+----------------+

我正在尝试创建一个 Alembic 规则,其中 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.op 对象的 upgrade()downgrade() 代码是什么?

【问题讨论】:

    标签: mysql sqlalchemy alembic


    【解决方案1】:

    假设你的模型有如下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"),
        )
    

    alembic 修订版的def upgrade(): 然后将包含以下命令以创建此唯一约束:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-01-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-01-18
      • 2018-09-20
      相关资源
      最近更新 更多