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

问题描述 投票:4回答:1

我正在使用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)

提前感谢

sql-server python-3.x sqlalchemy null unique-constraint
1个回答
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_indexdialect_expression key word arguments mssql_where=

© www.soinside.com 2019 - 2024. All rights reserved.