Flask多对多,一对多增删改查

模型类

# 多对多
# 创建中间表
article_tag = db.Table(
    "article_tag",
    db.Column("article_id", db.Integer, db.ForeignKey("article_model.id"), primary_key=True),  # 一张表的外键
    db.Column("tag_id", db.Integer, db.ForeignKey("tag_model.id"), primary_key=True)  # 另一张表的外键
)


class ArticleModel(db.Model):
    id = db.Column(db.Integer, primary_key=True, autoincrement=True)
    name = db.Column(db.String(100), comment="文章名")
    tag = db.relationship("TagModel", secondary=article_tag, backref=db.backref("article"))  # 任意一张表声明关系


class TagModel(db.Model):
    id = db.Column(db.Integer, primary_key=True, autoincrement=True)
    name = db.Column(db.String(100), comment="标签名")

多对多查

from flask import Blueprint
from flask_restful import Api, Resource
from model.model import StuModel, SubModel, db, ArticleModel, TagModel

stu_bp = Blueprint("stu_bp", __name__, url_prefix="/stu")

api = Api(stu_bp)


class StuView(Resource):
    def get(self):
        """多对多添加数据"""
        # 一次性把文章和标签全部添加进去
        # t1 = TagModel(name="python")
        # t2 = TagModel(name="人工智能")
        #
        # a1 = ArticleModel(name="人工智能的前景")
        # a1.tag.append(t1)
        # a1.tag.append(t2)
        #
        # db.session.add(a1)
        # db.session.commit()

        # t3 = TagModel.query.filter(TagModel.name == "python").first()
        # a2 = ArticleModel(name="深拷贝浅拷贝的区别")
        # a2.tag.append(t3)
        # db.session.add(a2)
        # db.session.commit()

        # t3 = TagModel.query.filter(TagModel.name == "python").first()
        # t4 = TagModel.query.filter(TagModel.name == "人工智能").first()
        # a3 = ArticleModel.query.get(1)
        #
        # a3.tag.remove(t3)
        # a3.tag.append(t4)
        #
        # db.session.commit()

        # 知道一条数据,查询相关数据
        # a4 = ArticleModel.query.get(1)
        # tag_list = a4.tag
        # print(tag_list)
        #

        t4 = TagModel.query.get(2)
        article_list = t4.article
        print(article_list)

        return ""


api.add_resource(StuView, "/stu")

一对多增删改查

from flask import Blueprint
from flask_restful import Api, Resource
from model.model import StuModel, SubModel, db, ArticleModel, TagModel

stu_bp = Blueprint("stu_bp", __name__, url_prefix="/stu")

api = Api(stu_bp)


class StuView(Resource):
    def get(self):
        """一对多添加数据"""
        # 添加专业
        # s = SubModel(name="python")
        # s = SubModel(name="大数据")
        # s = SubModel.query.get(1)

        # 添加学生
        # stu = StuModel(name="李四", sub=s)
        # db.session.add(stu)
        # db.session.commit()

        # 一对多直接传入id添加
        # sub = SubModel.query.get(1)
        # # stu = StuModel(name="小明", sub=sub)
        #
        # stu = StuModel(name="lisa", sub_id=sub.id)
        # db.session.add(stu)
        # db.session.commit()

        """一对多修改数据"""
        # 1.先查询到课程内容
        # s = SubModel.query.get(1)
        # # 2.再查询到学生
        # stu = StuModel.query.filter(StuModel.name == "张三").first()
        # # 3.调用主表中的sub别名等于新值
        # stu.sub = s
        # db.session.commit()

        """一对多查询数据"""
        # # 通过一方多查  通过专业查学生 正向查询
        # sub = SubModel.query.get(1)
        #
        # stu = sub.stu   # stu是字段
        # print(stu) # [<StuModel 1>, <StuModel 3>]
        # print(type(stu)) # <class 'sqlalchemy.orm.collections.InstrumentedList'>

        # 通过多方查一方  通过学生查专业  反向查询
        stu = StuModel.query.filter(StuModel.name == "张三").first()
        sub = stu.sub.name
        print(sub)  # python

        return ""


api.add_resource(StuView, "/stu")

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值