Vous devez utiliser un index unique fonctionnel pour appliquer cette contrainte. Malheureusement, la base de données générique machines de définition de schéma indépendant dans SQLAlchemy ne permet pas encore d'abstraire les index fonctionnels. Vous devrez utiliser la construction DDL pour enregistrer les clauses de définition de schéma personnalisées. Si vous utilisez l'approche déclarative pour déclarer votre schéma ajouter ce qui suit après votre définition de classe:
DDL(
"CREATE UNIQUE INDEX doc_year_num_uniq ON %(fullname)s "
"(EXTRACT(YEAR FROM date), number)"
).execute_at('after-create', Document.__table__)
Cette méthode fonctionne très bien, mais jette un avertissement SADeprecation dans v0.7 La syntaxe que je l'ai utilisé avec succès:
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'
)
)
Cela fonctionne bien, merci beaucoup :) – Joril
Note: le '% (fullname) s' est rempli dans SQLAlchemy à partir des informations dans le champ de la table, ici' ModelObject .__ table__'. –