SQLAlchemy 使用(二)表关联
前言
在上一章中我们介绍了 SQLAlchemy 建立基本表,但是一般情况下,表之间是有关联的,比如 一对一/一对多/多对多,当然 SQLAlchemy 是支持建立model时指定关系的
正文
多对一/一对多
我们建立两个表,VIP和VIP_info, 逻辑应该是一对一,我们先测试一对多
class VIP(Base):
# VIP用户
__tablename__ = 'vip' # 表名
id = Column(Integer, primary_key=True) # id
name = Column(String(), nullable=False, index=True, unique=True) # name
pwd = Column(String(), nullable=False) # pwd
money = Column(Integer, nullable=True) # 金币
status = Column(Integer, nullable=False) # 账号状态(:正常,:封禁,:审核) class VIPInfo(Base):
# VIP信息
__tablename__ = 'vip_info' # 表名
id = Column(Integer, primary_key=True) # id
info = Column(String()) # 备注
fk_vip_info_on_vip = Column(Integer, ForeignKey('vip.id')) # 关联外键VIP.id(多对一)(这里的VIP是tablename不是class名)
VIP = relationship('VIP', backref=backref('VIP_Info')) # 设置关联使VIPInfo能查询到VIP, 注意这里的字段名在序列化组件的跨表时有用
注意,设置多对一的时候,只设置ForeignKey只能从 VIP 查询到 VIPInfo,必须要设置 relationship 才可以反向查询(从VIP查询到VIPInfo)
一对一
一对一与多对一差不多,如果想要一对一,只需要在原有 多对一 的 多 字段设置 unique(唯一)即可
我们把之前的代码改成一对一
class VIP(Base):
# VIP用户
__tablename__ = 'vip' # 表名
id = Column(Integer, primary_key=True) # id
name = Column(String(), nullable=False, index=True, unique=True) # name
pwd = Column(String(), nullable=False) # pwd
money = Column(Integer, nullable=True) # 金币
status = Column(Integer, nullable=False) # 账号状态(:正常,:封禁,:审核) class VIPInfo(Base):
# VIP信息
__tablename__ = 'vip_info' # 表名
id = Column(Integer, primary_key=True) # id
info = Column(String()) # 备注
fk_vip_info_on_vip = Column(Integer, ForeignKey('vip.id'), unique=True, index=True) # 关联外键VIP.id(多对一)
VIP = relationship('VIP', backref=backref('VIP_Info', uselist=False)) # 设置关联使VIPInfo能查询到VIP, 注意这里的字段名在序列化组件的跨表时有用
需要值得注意的是 relationship 多了 uselist=False
这个参数是控制查询范围的,如果是一对一我们常把 uselist 设为 False
默认是 True 的, 举个例子,当我们从 VIP表关联到 VIPInfo表时,如果 uselist为True,那么他会找到对应关联的所有VIPInfo 反之指找一个就结束.所以一对一时我们直接写 False 因为我们知道只有一个对应
第三章我们会介绍如何在 Flask中使用 SQLAlchemy
SQLAlchemy 使用(二)表关联的更多相关文章
- sqlalchemy操作----多表关联
有二张表,一张作者表,一张书表,一个作者写多本书,一本书可以由多个作者写,与是通过新加一张关系表把他们联系起来 #!/usr/bin/env python # -*- coding: utf-8 -* ...
- EF里单个实体的增查改删以及主从表关联数据的各种增删 改查
本文目录 EF对单个实体的增查改删 增加单个实体 查询单个实体 修改单个实体 删除单个实体 EF里主从表关联数据的各种增删改查 增加(增加从表数据.增加主从表数据) 查询(根据主表找从表数据.根据从表 ...
- SQL语句分组排序,多表关联排序
SQL语句分组排序,多表关联排序总结几种常见的方法: 案例一: 在查询结果中按人数降序排列,若人数相同,则按课程号升序排列? 分析:单个表内的多个字段排序,一般可以直接用逗号分割实现. select ...
- salesforce 零基础开发入门学习(四)多表关联下的SOQL以及表字段Data type详解
建立好的数据表在数据库中查看有很多方式,本人目前采用以下两种方式查看数据表. 1.采用schema Builder查看表结构以及多表之间的关联关系,可以登录后点击setup在左侧搜索框输入schema ...
- Yii 多表关联relations,需要与with()方法联合使用
1,首先多表关联是在models/xx.php的relations里配置的.而且是互配,但有区别. 格式: 'VarName'=>array('RelationType', 'ClassName ...
- Oracle\MS SQL Server Update多表关联更新
原文:Oracle\MS SQL Server Update多表关联更新 一条Update更新语句是不能更新多张表的,除非使用触发器隐含更新.而表的更新操作中,在很多情况下需要在表达式中引用要更新的表 ...
- mongodb操作之使用javaScript实现多表关联查询
一.数据控制 mongodb操作数据量控制,千万控制好,不要因为操作的数据量过多而导致失败. 演示一下发生此类错误的错误提示:
- ofbiz学习笔记01--多表关联查询
不管做什么项目,肯定会用到多表关联查询数据,从网络查询得知ofbiz有三种多表关联查询方法 实现一:Screem.xml 中的 section 里,加 <action>, 加 get-re ...
- Oracle两张表关联批量更新其中一张表的数据
Oracle两张表关联批量更新其中一张表的数据 方法一(推荐): UPDATE 表2 SET 表2.C = (SELECT B FROM 表1 WHERE 表1.A = 表2.A) WHERE EXI ...
随机推荐
- 正则去除字符串中的html标签,但不去除<br>标签
一.去除html标签 filterHTMLTag(msg) { var msg = msg.replace(/<\/?[^>]*>/g, ''); //去除HTML Tag msg ...
- 【MySQL 读书笔记】当我们在使用索引的时候我们在做什么
我记得之前博客我也写过关于索引使用的文章,但是并不全面,这次尽量针对重点铺全面一点. 因为索引是数据引擎层的结构我们只针对最常见使用的 Innodb 使用的 B+Tree 搜索树结构进行介绍. 每一个 ...
- 一次单体测试的采坑--MatcherAssert.assertThat---org.hamcrest 和org.mockito
单体测试测试环境ci上报这个错, 本地没问题. org.hamcrest.Matcher.describeMismatch(Ljava/lang/Object;Lorg/hamcrest/Descri ...
- 台达PLC实现远程下载程序
台达PLC实现远程下载程序 日期:2019-04-27 时间 08:33:57 让物联变得更简单 18-09-2411:25 明明在公司调试没问题的设备一到 ...
- mysql left join 优化
参考 https://www.cnblogs.com/zedosu/p/6555981.html
- 【简】题解 AWSL090429 【市场】
因为这有个时间的限制 并且 求的时间都是前缀和 那么 我们可以根据时间将排序 因为题中没有修改可以直接用背包预处理出答案 但是因为题目ci mi<=1e9 vi<=300 所以发现不 ...
- 如何将知网下载的caj文件转换为pdf文件
一.问题描述: 最近在知网搜索论文的时候,经常遇到有的论文没有pdf文件的情况,但不得不吐槽我觉得知网做的阅读器确实是有点烂.所以想将caj文件转化为pdf文件,找到了一个比较好的方法,所以希望记录一 ...
- 数位DP::SoSDP
数位DP:: SoSDP 学习博客(待补) 下面做一些例题: SPECIAL PAIRS 题意 给n个数字,求这些数字有多少对的\(AND\) 结果是0.数字不大于1e6.顺序反相反视为不同的对. 思 ...
- Spring Boot学习总结一
Spring Boot大大简化了之前java项目的繁琐xml配置,本文简单的总结下spring boot的相关知识. 1,@RestController 配置在controller中就是control ...
- 分布式协调服务Zookeeper集群之ACL篇
分布式协调服务Zookeeper集群之ACL篇 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.zookeeper ACL相关知识概览 1>.zookeeper官方文档(h ...