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

4

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

我知道MS SQL Server不会忽略NULL值,并认为它是唯一键(UNIQUE KEY)的违规。我也知道如何使用SQL代码解决此问题(参见这里)。

但是否有一种直接在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个回答

1

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'),
)

这里使用SQLAlchemy的sql表达式文本,以及create_index方言表达式关键字参数mssql_where=

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接