SQLAlchemy和mssql:如何创建具有多个空值的唯一约束

时间:2019-04-16 14:39:33

标签: sql-server python-3.x sqlalchemy

我正在使用SQLAlchemy和MS SQL Server,我想创建一个允许多个NULL值的唯一约束。

我知道MS SQL Server不会忽略空值,并将其视为对UNIQUE KEY的违反。 我也知道如何使用SQL代码修复它(请参见here

但是有没有一种方法可以直接对SQLAlchemy做同样的事情?

这是我的代码:

class Referential(db.Model):
     __tablename__ = "REFERENTIAL"
     id = db.Column("ID", Integer, primary_key=True, autoincrement=True)
     name = db.Column("NAME", String(100), index=True, unique=True, nullable=False)
     internal_code = db.Column("INTERNAL_CODE", String(50), unique=True, index=True)

预先感谢

1 个答案:

答案 0 :(得分:0)

当在唯一列中允许空值时,MSSQL的实现有点奇怪。

import sqlalchemy as sa

sa.Table(
    sa.Column('column', sa.String(50), nullable=True),
    sa.Index('uq_column_allows_nulls', mssql_where=sa.text('column IS NOT NULL'),
)

如果您打算像我一样使用Alembic,这是代码:

import sqlalchemy as sa
import alembic as op

op.create_index(
    name='uq_column_name',
    table_name='table',
    columns=['column'],
    mssql_where=sa.text('column IS NOT NULL'),
)

这将sql expression文本用于sqlalchemy和create_index的{​​{3}} mssql_where=