簡體   English   中英

如何插入多對多記錄數據?

[英]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 ,反之亦然,但是我不知道為給定posttag添加新的關聯。

請查看以下屏幕截圖,了解我如何查詢相關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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM