flask 模型一对多个人理解
在modle中创建两个模型表
class User(db.Model):
id = db.Column(db.Integer,primary_key=True,autoincrement=True)
u_name = db.Column(db.String(10), unique=True)
posts = db.relationship('Dongtai',backref='user',lazy='dynamic') class Dongtai(db.Model):
id = db.Column(db.Integer,primary_key=True,autoincrement=True)
body = db.Column(db.String(140),unique=True)
u_id = db.Column(db.Integer,db.ForeignKey('user.id'))
分别是用户和动态模型
之间进行了关联 注意进行关联需要外链配合使用,只有一边进行关联会出错
一对多
一般来说自己做查询操作,比如我想要知道一个用户发的动态,那么需要先查询用户信息,然后通过用户信息查询用户的动态
但是flask-sqlalchemy通过一个关联属性可以只需要查询用户即可得到所发的动态
@app.route('/xxx/')
def get_query():
# 其他属性也行 id
u = User.query.filter(u_name="查询的用户").first()
bodys = u.posts
return render_template('xxxx.html',bodys=bodys)
# 网页渲染
{% for body in bodys %}
{{ body.body }}<br>
{{ body.u_id }}<br>
{% endfor %}
多对一
多对一的查询由于有了反向代理
relationship('Dongtai',backref='user',lazy='dynamic')
可以通过
d = Dongtai.query.first()
print(d.user.u_name)
直接询问动态模型进行查询,通过
ralationship("Dongtai",backref='user',lazy='dynamic')
# 注意反向代理的backref 名称
通过反向关联的名称表可以得到user表中的属性
更新一下,


增加两个模型作为添加数据实验
python manage.py shell # 进入shell 模式 进行数据添加
导入模型和db

在已有的用户数据中提取一个id为3的

做一个用户动态的实例

这里貌似有一个坑点,不知道其他人和我相同不?
你不能直接 p.user_id = u 用户实例 必须要使用 u.id 才能在之后的commit()中保存,不然会出现以下错误

db.session.add(p)
db.session.commit() 保存即可,在数据库中post表中存在数据

当然除了这个还有另一种,比如在 用一个用户实例 u

使用关系 进行append 添加 p1动态 p1的user_id 则设置为u实例的 id 3
在将 动态p1 加入数据库 保存
数据库中也能显示出 post表 user_id为3的动态
如果需要查看用户所拥有的post,因为在用户表中设置了关联,所以使用 以下进行查看 ,但是注意,因为关联表中设置了 lazy = 'dynamic' 懒加载

前一份u.posts 是指一个对象basequery,还可以对该对象进行一个筛选 比如我在动态表中存储了2条用户id为3的数据


通过筛选动态表中动态id为13的动态, 发现还是属于basequery的对象,还能进行下一步操作

得到一个用户动态的实例 13
如果查看该实例的body属性 根据上面的操作.body

后面一个这是直接将上一个对象进行一个数据加载 变为放在内存中的数据
all 是所有数据,所以需要进行一个循环遍历
for i in u.posts.all():
i.body

如果是first() 则不需要遍历 直接body

flask 模型一对多个人理解的更多相关文章
- 后盾网lavarel视频项目---模型一对多关联简单实例
后盾网lavarel视频项目---模型一对多关联简单实例 一.总结 一句话总结: 在模型中定义一个方法来设置一对多关联:return $this->hasMany(Video::class); ...
- Flask 模型操作
ORM 简称 ORM, O/RM, O/R Mapping 持久化模型 特征 数据表和编程类的映射 数据类型映射 字段属性映射类的属性和数据类型 关系映射 表于表之间的关系对应到 编程类的关系上 优点 ...
- 深度|OpenAI 首批研究成果聚焦无监督学习,生成模型如何高效的理解世界(附论文)
本文经机器之心(微信公众号:almosthuman2014)授权转载,禁止二次转载,原文. 选自 Open AI 作者:ANDREJ KARPATHY, PIETER ABBEEL, GREG BRO ...
- 对Java内存模型即JMM的理解
类似物理上的计算机系统,Java虚拟机规范中也定义了一种Java内存模型,即Java Memory Model(JMM),来屏蔽掉各种硬件和操作系统的内存访问差异,以实现让Java程序在各种平台下都能 ...
- 从GO内存模型与调用协议理解defer closure的坑
资料参考: 官网defer介绍: https://blog.golang.org/defer-panic-and-recover 深入解析go: 多值返回: https://tiancaiamao.g ...
- 关于THINKPHP5模型关联的初步理解
初步理解的意思是,使用最常用的关联模型,然后可以正常运行 还是打个比方 文章表 和文章分类表 一个文章分类可以有多个文章 所以 文章分类模型和文章建立 hasMany的关联 而文章和文章分类表则 ...
- Java内存模型解惑--观深入理解Java内存模型系列文章有感(二)
1.volatile关键字修饰的域的特性 当我们声明共享变量为volatile后,对这个变量的读/写将会很特别.理解volatile特性的一个好方法是:把对volatile变量的单个读/写,看成是使用 ...
- CORS跨域模型浅析及常见理解误区分析
CORS跨域资源共享是前后端跨域十分常用的一种方案,主要依赖Access-Control-Allow(ACA)系列header来实现一种协商性的跨域交互. 基本模型 其中的具体流程大致可以分为以下几步 ...
- 用一两句话说一下你对“盒模型”这个概念的理解,和它都涉及到哪些css属性
网页设计中常听的属性名:内容(content).填充(padding).边框(border).边界(margin), CSS盒子模式都具备这些属性. 这些属性我们可以用日常生活中的常见事物——盒子作一 ...
随机推荐
- Qt platform plugin 'windows' 问题的解决方法
关于Qt 发布程序时遇到qt platform plugin ‘windows’问题的解决方法如下 遇到这个问题,一般应该已经把一部分dll拷贝到了发布的可执行文件同级目录, 我是直接添加C:\Qt ...
- mysql数据库-基础--长期维护
############### 数据库 ############## 主要是通过这个学习到什么? 1,库的操作 2,表的操作,包括查询,多表查询,子查询 3,视图,事务,索引,锁, ### ...
- 错误修改.bashrc文件导致所有命令无法使用解决方法
export PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/bin
- u盘出现大文件无法复制的解决
如果u盘出现大文件无法复制的情况,修改U盘的文件系统格式: 把U盘格式化为NTFS格式. FAT32的都不能放4G+的文件;右键格式化里如果没有NTFS,就在开始运行里输入cmd 然后输入" ...
- python3之urllib代理池
1.常见状态吗 301:重定向到新的URL,永久性302:重定向到临时URL,非永久性304:请求的资源未更新400:非法请求401:请求未经授权403:禁止访问404:没找到对应页面500:服务器内 ...
- js 实现手风琴
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- flask_admin+flask_login 整合,jieba分词+echarts数据分析可视化
项目地址: https://github.com/WES6/list
- Eclipse如何打开Android工程
一.Eclipse如何打开Android工程 1.你可以在file->new->other->android object选择选项:create object from exists ...
- Java并发编程(01):线程的创建方式,状态周期管理
本文源码:GitHub·点这里 || GitEE·点这里 一.并发编程简介 1.基础概念 程序 与计算机系统操作有关的计算机程序.规程.规则,以及可能有的文件.文档及数据. 进程 进程是计算机中的程序 ...
- Java基础IO流 ,文件读取,由易至难
最基础的读取文件 import java.io.File;import java.io.FileInputStream;import java.io.FileNotFoundException;imp ...