如何在SQLAlchemy中添加UniqueConstraint


问题内容

如何使用SQLalchemy添加不区分大小写的UniqueConstraint?


问题答案:

在某些数据库中,字符串列默认情况下不区分大小写(MySQL,SQL Server),因此您无需执行任何其他操作。

在其他情况下,您可以创建一个功能索引来强制不区分大小写的唯一约束:

Index('myIndex', func.lower(mytable.c.myColumn), unique=True)

如果数据库支持,您还可以为该列指定不区分大小写的排序规则。例如,SQLite具有“ NOCASE”排序规则:

myColumn = Column(String(255), collation='NOCASE', nullable=False)

参见http://docs.sqlalchemy.org/en/latest/core/type_basics.html?highlight=collat​​ion#sqlalchemy.types.String.params.collat​​ion

如果数据库提供了合适的类型,则也可以为列指定用户定义的类型。PostgreSQL具有不区分大小写的citext数据类型。参见https://github.com/mahmoudimus/sqlalchemy-
citext

最后,您可以自定义DDL以为您的特定数据库创建约束。