一个快速的 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/