我正在使用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)
提前感谢
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
的dialect_expression key word arguments mssql_where=