关于sqlalchemy中的unique = True和(unique = True,index = True)

时间:2018-09-01 05:27:32

标签: python sqlalchemy

当我创建表时,使用如下的flask-sqlalchemy:

class Te(Model):
    __tablename__ = 'tt'
    id = Column(db.Integer(), primary_key=True)
    t1 = Column(db.String(80), unique=True, )
    t3 = Column(db.String(80), unique=True, index=True, )

在我的Sequel Pro中,我得到了表格创建信息:

CREATE TABLE `tt` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `t1` varchar(80) DEFAULT NULL,
  `t3` varchar(80) DEFAULT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `t1` (`t1`),
  UNIQUE KEY `ix_tt_t3` (`t3`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

这意味着t1与MySQL中的t3完全相同吗?因此,当您定义unique=True时,不需要定义index=True吗?

谢谢。

2 个答案:

答案 0 :(得分:1)

不是必需的。 唯一约束通常不是使用唯一索引来实现的,但是,如果您想要的只是唯一性,则不必关心该细节。

答案 1 :(得分:1)

我认为您对sqlalchemy中的索引目的感到困惑。在sql数据库中使用索引可加快查询性能。

根据defining constraints and indexes.的sqlalchemy文档

您会注意到索引键的使用,因为生成的sql代码是:

UNIQUE KEY `ix_tt_t3` (`t3`)

sqlalchemy名词如何索引为idx_%columenlabbel。并且与生成的sql代码匹配。

因此索引的使用与否仅与性能有关,并且唯一键意味着无法在“ tt”表的同一列上重复列值。

希望这会有所帮助,