【问题标题】:SQLAlchemy and mssql : how to create unique constraint with multiple null valueSQLAlchemy 和 mssql:如何创建具有多个空值的唯一约束
【发布时间】:2019-09-06 17:04:33
【问题描述】:

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

我知道 MS SQL 服务器不会忽略 null 值并将其视为违反 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】:

    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=

    【讨论】:

      猜你喜欢
      • 2021-05-09
      • 1970-01-01
      • 2010-10-20
      • 1970-01-01
      • 1970-01-01
      • 2010-12-15
      • 2016-08-22
      • 1970-01-01
      • 2021-09-13
      相关资源
      最近更新 更多