网站建设按什么收费,海珠区有没有专门做网站的地方,wordpress 網頁設計,彩虹二级域名分发前言
在上一篇Flask Python:模糊查询filter和filter_by#xff0c;数据库多条件查询中#xff0c;已经分享了几种常用的数据库操作#xff0c;这次就来看看模型的关联关系是怎么定义的#xff0c;先说基础的关联哈。在分享之前#xff0c;先分享官方文档,点击查看 从文档…前言
在上一篇Flask Python:模糊查询filter和filter_by数据库多条件查询中已经分享了几种常用的数据库操作这次就来看看模型的关联关系是怎么定义的先说基础的关联哈。在分享之前先分享官方文档,点击查看 从文档中可以看到直接使用relationship方法定义关联关系,各个参数代表的含义可以直接看文档常用的参数有
argument:此参数指的是要关联的类。它接受多种形式包括对目标类本身的直接引用、目标类的Mapper实例、在调用时返回对类或Mapper的引用的Python可调用/lambda以及最终从使用中的注册表解析的类的字符串名称以定位类foreign_keys:在这个relationship对象的relationship.prprimaryjoin条件的上下文中用作“外键”列或引用远程列中值的列的列表。也就是说如果这个relationship的relationship.prprimaryjoin条件是a.idb.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_copy1id: Mapped[int] mapped_column(Integer, primary_keyTrue, nullableFalse, autoincrementTrue)r_type: Mapped[int] mapped_column(Integer, nullableFalse, default0)dept_id: Mapped[int] mapped_column(Integer, nullableFalse)title: Mapped[str] mapped_column(String(50), nullableFalse)published_time: Mapped[str] mapped_column(String(50), nullableFalse)publisher_book_name: Mapped[str] mapped_column(String(50))like_count: Mapped[int] mapped_column(Integer, nullableFalse, default0)view_count: Mapped[int] mapped_column(Integer, nullableFalse, default0)content: Mapped[str] mapped_column(Text)created_at: Mapped[datetime] mapped_column(DateTime, defaultdatetime.now)updated_at: Mapped[datetime] mapped_column(DateTime, defaultdatetime.now, onupdatedatetime.now)deptss: Mapped[Dept] relationship(Dept, foreign_keys[dept_id],primaryjoinDept.id Resource.dept_id)# id db.Column(db.INTEGER, primary_keyTrue, autoincrementTrue)# r_type db.Column(db.INTEGER, default0, commentresource type 0 文献 1 指南 2 大会)# is_show db.Column(db.INTEGER, default0, 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 fResource id{self.id} title{self.title}class Dept(db.Model):__tablename__ departmentid: Mapped[int] mapped_column(Integer, primary_keyTrue, nullableFalse, autoincrementTrue)name: Mapped[str] mapped_column(String(50), nullableFalse)english_name: Mapped[str] mapped_column(String(50), nullableFalse)created_at: Mapped[datetime] mapped_column(DateTime, defaultdatetime.now)updated_at: Mapped[datetime] mapped_column(DateTime, defaultdatetime.now, onupdatedatetime.now)resources: Mapped[Resource] relationship(Resource, foreign_keys[id],primaryjoinResource.dept_id Dept.id)
二、一对多关联