当我创建表时,使用如下的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
吗?
谢谢。
答案 0 :(得分:1)
不是必需的。 唯一约束通常不是使用唯一索引来实现的,但是,如果您想要的只是唯一性,则不必关心该细节。
答案 1 :(得分:1)
我认为您对sqlalchemy中的索引目的感到困惑。在sql数据库中使用索引可加快查询性能。
根据defining constraints and indexes.的sqlalchemy文档
您会注意到索引键的使用,因为生成的sql代码是:
UNIQUE KEY `ix_tt_t3` (`t3`)
sqlalchemy名词如何索引为idx_%columenlabbel
。并且与生成的sql代码匹配。
因此索引的使用与否仅与性能有关,并且唯一键意味着无法在“ tt”表的同一列上重复列值。
希望这会有所帮助,