[英]How to insert many to many record data?
請考慮以下用例。
有一個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
。
如果我在這里缺少任何內容,請告訴我。
謝謝
我窺探了一些舊代碼,像這樣的安裝模型:
from sqlalchemy.orm import sessionmaker
posttag = Table(
"posttag",
Base.metadata,
Column("id", INTEGER, Sequence("seq_posttag_id"), primary_key=True),
Column("post_id", INTEGER, ForeignKey("post.id")),
Column("tag_id", INTEGER, ForeignKey("tag.id")),
)
class ModelTag(Base):
__tablename__ = "tag"
id = Column(INTEGER, Sequence("seq_tag_id"), primary_key=True)
name = Column(VARCHAR(40), nullable=False)
class ModelPost(Base):
__tablename__ = "post"
id = Column(INTEGER, Sequence("seq_post_id"), primary_key=True)
name = Column(VARCHAR(100), nullable=False)
tags = relationship(Tag, secondary=posttag)
因此,當您創建一個新的帖子時,您可以在不直接引用帖子表的情況下為其添加標簽:
post = Post(name="foo")
tag = session.query(ModelTag).filter_by(name='some').first()
post.append(tag)
session = Session()
session.add(post)
session.commit()
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.