【发布时间】:2019-12-18 06:35:27
【问题描述】:
请考虑以下用例。
有Post 模型和Tag 模型。它们之间都有many-to-many 关系。一个post 可以有多个tags,而一个tag 可以有多个posts。
为了实现这个用例,我实现了一个名为 PostTag 的映射表,如下所示
from database.base import Base
from sqlalchemy import Column, ForeignKey, Integer
from sqlalchemy.orm import relationship
from .model_post import ModelPost
from .model_tag import ModelTag
class PostTag(Base):
__tablename__ = 'posttag'
post_id = Column("post_id",Integer, ForeignKey('post.id'), primary_key = True)
tag_id = Column("tag_id",Integer, ForeignKey('tag.id'), primary_key = True)
通过此设置,我可以成功查询给定post 的所有tags,反之亦然,但我不知道为给定post 和tag 添加新关联。
请看下面的截图,了解我如何查询相关的tags 和posts。
如果我在这里遗漏了什么,请告诉我。
谢谢
【问题讨论】:
-
您在创建记录时不使用 PostTag,如果您建立了关系,SQL Alchemy 会为您执行此操作。您的关系字段是一个列表,您将实例附加到它(如果您将其命名为
tags):post.tags.append(tag)。会话提交后,它将在您的posttag表中创建。 -
感谢您的帮助。你能告诉我,我如何在查询中传递
tag值,以便我可以将它添加到 postTag 表并与帖子建立关系。谢谢 -
创建过程中不涉及查询,只是将一个实例附加到列表中。通过其 id 从数据库中检索 ModelTag 实例或使用
tag = ModelTag()创建一个新实例并附加它。 -
假设,我有一个现有的标签和一个现有的帖子。现在在更新帖子期间,我想将其分配给现有标签。我想我需要传递标签,以便在帖子和标签之间创建关联。
-
不确定我是否理解。如果不是关于
post.tags.append(tag),那么它可能是关于tag.posts.append(post),其中tags和posts是关系字段的名称。
标签: python python-3.x graphql graphene-python graphene-sqlalchemy