python - 具有函数的复合 UniqueConstraint

标签 python sqlalchemy constraints

一个快速的 SQLAlchemy 问题...

我有一个类“Document”,其属性为“Number”和“Date”。我需要确保同一年没有重复的数字,是 有没有办法在“数字 + 年(日期)”上设置 UniqueConstraint?我应该改用唯一索引吗?我将如何声明功能部分?

(SQLAlchemy 0.5.5,PostgreSQL 8.3.4)

提前致谢!

最佳答案

您应该使用功能唯一索引来应用此约束。不幸的是,SQLAlchemy 中的数据库通用数据库独立模式定义机制尚未抽象出功能索引。您必须使用 DDL 构造来注册自定义模式定义子句。如果您使用声明性方法来声明您的架构,请在您的类定义之后添加以下内容:

DDL(
    "CREATE UNIQUE INDEX doc_year_num_uniq ON %(fullname)s "
    "(EXTRACT(YEAR FROM date), number)"
).execute_at('after-create', Document.__table__)

此方法非常有效,但在 v0.7 中会抛出 SADeprecation 警告 我成功使用的语法:

from sqlalchemy import event

event.listen(ModelObject.__table__,
         'after_create',
          DDL("CREATE UNIQUE INDEX term_year ON %(fullname)s "
              "(EXTRACT(YEAR FROM start_date), term)",
              on = 'postgresql'
              )
         )

关于python - 具有函数的复合 UniqueConstraint,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1510018/

相关文章:

mysql - SQL : Foreign Key Constraight Fails

python - 正则表达式的问题

python - 具有稀疏矩阵的matshow

具有默认参数的 Python 函数

python - 模型内的 Pyramid 事件

mysql - SQLAlchemy 呈现的 SQL 中的语法错误

python - 带有 Django 的 Bootstrap 4 无法正确显示

mysqldb中带有sqlAlchemy重复项的 Pandas to_sql

postgresql - 基于 SELECT 条件的 postgres 约束

java - 即使删除唯一约束后也出现 DuplicateKeyException