Comment un modèle "UNIQUE" contrainte de SQLAlchemy?
Je suis en train d'écrire un Flacon/SQLAlchemy application dans laquelle j'ai des utilisateurs et des groupes.
Les utilisateurs peuvent appartenir à plusieurs groupes, et ils ont un numéro unique au sein de chaque groupe. Leur demander comment le modèle de la base de données M'a conseillé d'utiliser la structure de table suivante pour mes nombreux à plusieurs relations:
TABLE UserGroups
GroupID
UserID
UserNumber
PRIMARY KEY (GroupID, UserID)
UNIQUE (GroupID, UserNumber)
FOREIGN KEY (GroupID)
REFERENCES Groups (GroupID)
FOREIGN KEY (UserID)
REFERENCES Users (UserID)
Maintenant, je sais comment créer une plusieurs-à-plusieurs relations avec SQLAlchemy, mais je ne sais pas comment représenter les UNIQUE
contrainte supplémentaire UserNumber
champ.
Je n'ai pas beaucoup d'expérience avec la conception de base de données, Formulaires et SQLAlchemy, ce qui peut être évident, mais je ne peux pas trouver un moyen de l'exprimer.
Sur des choses que je ne comprends pas: à l'aide d'un régulier de plusieurs-à-plusieurs relations, mon User
classe a un forme de liste attribut groups
qui contient tous les groupes dont il fait partie, mais ce masque totalement la UserGroups
de rejoindre la table et je ne sais pas comment accéder à la UserNumber
champ.
Tout cela est un peu flou pour moi. - Vous avez un bon exemple ou des explications sur la façon de faire une telle chose avec SQLAlchemy ?
OriginalL'auteur ereOn | 2013-01-16
Vous devez vous connecter pour publier un commentaire.
La première partie de la question (à propos de la création d'une contrainte unique avec plusieurs colonnes) est déjà répondu par cleg.
Cependant, le défaut plusieurs-à-plusieurs approche ne fonctionne pas si vous souhaitez avoir de plus de colonnes dans la table de mappage. Au lieu de cela, vous devez utiliser le L'Association De L'Objet Modèle. En outre, vous pouvez simplifier l'accès entre l'utilisateur et le groupe avec un association_proxy.
La
proxied_association.py
de la SQLAlchemy exemples devrait être un bon endroit pour commencer.OriginalL'auteur schlamar
Utilisation
UniqueConstraint
dans votre modèle. Dans le détail il est décrit dans cette question: sqlalchemy unique sur plusieurs colonnesComme pour plusieurs-à-plusieurs relations, SQLAlchemy ont assez bon tutoriel.
P. S. Désolé, j'ai raté la deuxième partie de la réponse (c'est plus complexe, alors j'ai pensé, afin de voir la réponse de @schlamar), mais la première partie est toujours correcte.
OK, merci 🙂
J'ai écrit ma réponse avant vu @schlamar, mais maintenant ajouté une référence.
Détendez-vous, j'ai défait le vote il y a des siècles 🙂
Ce n'est pas la question des pensions de titres, je veux juste être honnête 🙂
OriginalL'auteur cleg