mysql 双重约束_定义约束和索引 — SQLAlchemy 1.4 Documentation

配置约束命名约定¶

关系数据库通常为所有约束和索引指定显式名称。在创建表的常见情况下,使用 CREATE TABLE 如果在表定义中生成诸如check、unique和primary key约束之类的约束,则数据库通常有一个系统,在该系统中,如果没有另外指定名称,则会自动将名称分配给这些约束。当使用诸如 ALTER TABLE ,此命令通常需要为新约束指定显式名称,并且能够指定要删除或修改的现有约束的名称。

修改现有表和约束的用例可以由模式迁移工具处理,例如 Alembic . 但是,alembic和sqlacalchemy目前都没有为未指定名称的约束对象创建名称,这导致了能够更改现有约束意味着必须对关系数据库使用的命名系统进行反向工程以自动分配名称,或者必须注意确保约束已命名。

与必须给所有人指定明确的名字不同 Constraint 和 Index 对象,可以使用事件构造自动命名方案。这种方法的优点是,约束将获得一致的命名方案,而不需要在整个代码中使用显式的名称参数,而且对于由 Column.unique 和 Column.index 参数。从SQLAlchemy 0.9.2开始,此基于事件的方法包括在内,并且可以使用参数进行配置 MetaData.naming_convention .

MetaData.naming_convention 指接受 Index 阶级或个人 Constraint 类作为键,python字符串模板作为值。它还接受一系列字符串代码作为可选键, "fk" , "pk" , "ix" , "ck" , "uq" 分别用于外键、主键、索引、检查和唯一约束。每当约束或索引与此关联时,将使用此字典中的字符串模板 MetaData 没有给定现有名称的对象(包括一个可以进一步修饰现有名称的异常情况)。

适合基本情况的命名约定示例如下:

convention = {

"ix": 'ix_%(column_0_label)s',

"uq": "uq_%(table_name)s_%(column_0_name)s",

"ck": "ck_%(table_name)s_%(constraint_name)s",

"fk": "fk_%(table_name)s_%(column_0_name)s_%(referred_table_name)s",

"pk": "pk_%(table_name)s"

}

metadata = MetaData(naming_convention=convention)

上述约定将为目标内的所有约束建立名称。 MetaData 收集。例如,我们可以观察创建未命名的 UniqueConstraint ::

>>>user_table = Table('user', metadata,

... Column('id', Integer, primary_key=True),

... Column('name', String(30), nullable=False),

... UniqueConstraint('name')

...)

>&g

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值