python - 如何插入多对多记录数据?
问题描述
请考虑以下用例。
有Post
模型,也有Tag
模型。他们俩之间都有many-to-many
关系。Apost
可以有多个tags
,而 atag
可以有多个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)
使用此设置,我可以成功查询tags
给定的所有post
,反之亦然,但我不知道为给定的post
and添加新的关联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 时,您可以在不直接引用 posttag 表的情况下为其添加标签:
post = Post(name="foo")
tag = session.query(ModelTag).filter_by(name='some').first()
post.append(tag)
session = Session()
session.add(post)
session.commit()
推荐阅读
- ionic-framework - Ionic 4 滑块分页点与文本重叠
- ipfs - 哈希如何获得种子/引脚
- python - Python 中的描述性统计数据 / 使用 Pandas,括号中为 std
- java - 我有 @xmlrootelement ,但不断收到此异常:无法将类型编组为元素,因为它缺少 @XmlRootElement
- jasmine - 在茉莉花中无法正确使用完成
- apache-kafka-streams - 重新创建商店需要很多时间
- r - 如何在 pdf 文件中嵌入信息(由 plot 创建)?
- node.js - 如何从本地所需模块合并 node_modules
- css - 为什么 flexbox 会影响其包含列表项的标记?
- reactjs - 以 React 形式编辑图像