2010-02-10 10 views
0

Supposons que j'ai une table Articles, qui a des champs article_id, content et il contient un article avec l'ID 1.SQLAlchemy ForeignKey relation via une table intermédiaire

J'ai aussi une table Categories, qui a des champs category_id (clé primaire), category_name, et il contient une catégorie avec id 10.

Supposons maintenant que j'ai une table ArticleProperties, qui ajoute des propriétés à Articles. Cette table a des champs article_id, property_name, property_value.

Supposons que je veux créer un mappage Categories-Articles via la table ArticleProperties. Pour ce faire, insérez les valeurs suivantes dans la table ArticleProperties: (article_id = 1, property_name = "category", property_value = 10).

Est-il possible d'exprimer en SQLAlchemy que les lignes dans le tableau ArticleProperties avec property_name « catégorie » sont en fait des clés étrangères de la table Articles à la table Categories?

Ceci est un problème compliqué et je n'ai pas trouvé de réponse moi-même.

Toute aide appréciée!

Merci, Boda Cydo.

+0

quelqu'un peut-il répondre? S'il vous plaît??? – bodacydo

+0

George, j'ai eu des données insérées dedans. après votre modification, personne ne sait que article_id = 1 est le seul article que j'avais dans la table, et property_value = 10 signifie que je n'avais qu'une seule catégorie avec category_id = 10. – bodacydo

+0

Pourquoi voulez-vous si mal mettre les Catégories dans la grande (et générique) liste des ArticleProperties? – van

Répondre

1

En supposant que je comprends votre question correctement, alors non, vous ne pouvez pas modéliser cette relation comme vous l'avez suggéré. (Ce serait utile si vous décriviez votre résultat souhaité, plutôt que votre solution perçue)

Ce que je pense que vous voulez est une table de mappage many-to-many appelée ArticleCategories, composée de 2 int colonnes, ArticleID et CategoryID (avec FK respectifs)

+0

Un article peut avoir de nombreuses propriétés - catégorie, qui a été le dernier à modifier l'article, la phase de la lune de l'article a été créé, ou tout ce que vous pouvez imaginer. Je ne peux pas le modéliser comme ArticleCategories, ou ArticleMoonPhase, car il y a un nombre infini de propriétés (noms que je ne sais même pas parfois - les utilisateurs qui créent des articles y ajoutent des propriétés). – bodacydo

+0

Le résultat final est que lorsque je fais quelque chose comme Article.property_name et que sqlalchemy trouve automatiquement la valeur. Dans mon exemple simple, .property_name serait .category, et sqlalchemy sachez que .category est une clé étrangère dans la table Categories, et au lieu de renvoyer id = 10, elle saurait que .category est une clé étrangère dans Category et retourne un objet Catégorie complète. – bodacydo

+0

J'espère que je l'ai expliqué un peu plus clairement. – bodacydo

Questions connexes