当前位置: 首页 > news >正文

Flask Python:数据库多条件查询,flask中模型关联

前言

在上一篇Flask Python:模糊查询filter和filter_by,数据库多条件查询中,已经分享了几种常用的数据库操作,这次就来看看模型的关联关系是怎么定义的,先说基础的关联哈。在分享之前,先分享官方文档,点击查看
在这里插入图片描述
从文档中可以看到直接使用relationship()方法定义关联关系,各个参数代表的含义,可以直接看文档,常用的参数有:

  • argument:此参数指的是要关联的类。它接受多种形式,包括对目标类本身的直接引用、目标类的Mapper实例、在调用时返回对类或Mapper的引用的Python可调用/lambda,以及最终从使用中的注册表解析的类的字符串名称,以定位类
  • foreign_keys:在这个relationship()对象的relationship.prprimaryjoin条件的上下文中,用作“外键”列或引用远程列中值的列的列表。也就是说,如果这个relationship()的relationship.prprimaryjoin条件是a.id==b.a_id,并且b.a_id中的值必须存在于a.id中,那么这个relationshop()的“外键”列就是b.a_id。
  • primaryjoin:SQL表达式,将用作子对象与父对象的主联接,或在多对多关系中用作父对象与关联表的联接。默认情况下,此值是基于父表和子表(或关联表)的外键关系计算的。
    relationship.prprimaryjoin也可以作为在映射程序初始化时评估的可调用函数传递,并且在使用Declarative时可以作为Python可评估字符串传递。
  • 其他参数的含义,直接参考文档哈

一、一对一关联

有两张表,一张是内容表,一张是科室表。其中一个文章只属于一个科室,这是一对一,分享一下我的代码

from project.extension import db
from datetime import datetime
from sqlalchemy import Integer, String, DateTime, Text
from sqlalchemy.orm import Mapped, mapped_column, relationship# 资源内容模型
class Resource(db.Model):__tablename__ = 'resource_copy1'id: Mapped[int] = mapped_column(Integer, primary_key=True, nullable=False, autoincrement=True)r_type: Mapped[int] = mapped_column(Integer, nullable=False, default=0)dept_id: Mapped[int] = mapped_column(Integer, nullable=False)title: Mapped[str] = mapped_column(String(50), nullable=False)published_time: Mapped[str] = mapped_column(String(50), nullable=False)publisher_book_name: Mapped[str] = mapped_column(String(50))like_count: Mapped[int] = mapped_column(Integer, nullable=False, default=0)view_count: Mapped[int] = mapped_column(Integer, nullable=False, default=0)content: Mapped[str] = mapped_column(Text)created_at: Mapped[datetime] = mapped_column(DateTime, default=datetime.now)updated_at: Mapped[datetime] = mapped_column(DateTime, default=datetime.now, onupdate=datetime.now)deptss: Mapped['Dept'] = relationship('Dept', foreign_keys=[dept_id],primaryjoin='Dept.id == Resource.dept_id')# id = db.Column(db.INTEGER, primary_key=True, autoincrement=True)# r_type = db.Column(db.INTEGER, default=0, comment='resource type 0 文献 1 指南 2 大会')# is_show = db.Column(db.INTEGER, default=0, comment='是否上架 0 未上架 1 上架')# title = db.Column(db.String(40))# desc = db.Column(db.TEXT)# cover = db.Column(db.String(40))# published_time = db.Column(db.String(40))# content = db.Column(db.TEXT)# file_path = db.Column(db.String(128))# origin_link = db.Column(db.String(128))# view_count = db.Column(db.INTEGER)# like_count = db.Column(db.INTEGER)# collect_count = db.Column(db.INTEGER)# file_size = db.Column(db.String(40))# publisher_book_name = db.Column(db.String(40))# resource_type_id = db.Column(db.INTEGER)def to_format(self):return {"id": self.id,"title": self.title,"published_time": self.published_time,"view_count": self.view_count,"publisher_book_name": self.publisher_book_name,"dept_name": self.deptss.name,"dept_en_name": self.deptss.english_name}def __repr__(self) -> str:return f'<Resource id={self.id} title={self.title}>'class Dept(db.Model):__tablename__ = 'department'id: Mapped[int] = mapped_column(Integer, primary_key=True, nullable=False, autoincrement=True)name: Mapped[str] = mapped_column(String(50), nullable=False)english_name: Mapped[str] = mapped_column(String(50), nullable=False)created_at: Mapped[datetime] = mapped_column(DateTime, default=datetime.now)updated_at: Mapped[datetime] = mapped_column(DateTime, default=datetime.now, onupdate=datetime.now)resources: Mapped[Resource] = relationship('Resource', foreign_keys=[id],primaryjoin='Resource.dept_id == Dept.id')

二、一对多关联

相关文章:

  • FLink学习(三)-DataStream
  • 零长数组,whatwhy
  • Java面试宝典
  • JS-11A/11时间继电器 板前接线 JOSEF约瑟
  • 详细介绍如何利用 A star(A*)算法解决8数码问题
  • 基于Java,SSM,html,Vue在线视频播放管理系统网站设计
  • Windows通过git配置github代码仓库全流程
  • Android compose 使用指纹验证
  • GDAL升级到3.0之后遇到的坑
  • MySQL与SQLite区别
  • 【Frida】【Android】 07_爬虫之网络通信库HttpURLConnection
  • 【并发编程】CountDownLatch
  • 多线程中常用的一些方法介绍
  • Mongodb中一个小巧的数据更新命令$inc
  • Arraylist,TreeSet,TreeMap的增删改查及遍历
  • [PHP内核探索]PHP中的哈希表
  • 【108天】Java——《Head First Java》笔记(第1-4章)
  • 【许晓笛】 EOS 智能合约案例解析(3)
  • 0基础学习移动端适配
  • Android 架构优化~MVP 架构改造
  • Bootstrap JS插件Alert源码分析
  • express.js的介绍及使用
  • fetch 从初识到应用
  • JavaWeb(学习笔记二)
  • JS专题之继承
  • Linux链接文件
  • python_bomb----数据类型总结
  • windows下如何用phpstorm同步测试服务器
  • 从伪并行的 Python 多线程说起
  • 回顾2016
  • 基于 Babel 的 npm 包最小化设置
  • 算法-图和图算法
  • 小程序滚动组件,左边导航栏与右边内容联动效果实现
  • - 转 Ext2.0 form使用实例
  • NLPIR智能语义技术让大数据挖掘更简单
  • 树莓派用上kodexplorer也能玩成私有网盘
  • ​​​​​​​​​​​​​​Γ函数
  • ​Distil-Whisper:比Whisper快6倍,体积小50%的语音识别模型
  • (9)STL算法之逆转旋转
  • (C语言)求出1,2,5三个数不同个数组合为100的组合个数
  • (第9篇)大数据的的超级应用——数据挖掘-推荐系统
  • (剑指Offer)面试题34:丑数
  • (免费分享)基于springboot,vue疗养中心管理系统
  • (三)Honghu Cloud云架构一定时调度平台
  • (十六)串口UART
  • (转)从零实现3D图像引擎:(8)参数化直线与3D平面函数库
  • (最优化理论与方法)第二章最优化所需基础知识-第三节:重要凸集举例
  • * 论文笔记 【Wide Deep Learning for Recommender Systems】
  • .net core 依赖注入的基本用发
  • .Net MVC4 上传大文件,并保存表单
  • .net 按比例显示图片的缩略图
  • .NET 程序如何获取图片的宽高(框架自带多种方法的不同性能)
  • .net 无限分类
  • .Net下C#针对Excel开发控件汇总(ClosedXML,EPPlus,NPOI)
  • /bin/bash^M: bad interpreter: No such file or directory