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盒子模式都具备这些属性. 这些属性我们可以用日常生活中的常见事物——盒子作一 ...
随机推荐
- 65)PHP,跨脚本周期存变量(会话技术)
(1)写入变量,常量,全局变量都不行, (2)试一下用文件存那个变量: 但是有一个问题:就是文件,只要一个用登陆成功了,其余的所有用户都可以直接用那个登录许可的标志了,然后只要用户名和密码登录成功,那 ...
- linux环境下卸载mysql
第一种使用yum安装的mysql,使用如下命令进行卸载(不能确定使用何种方式安装的mysql情况下,按后续步骤一一进行处理即可): # yum remove mysql mysql-server my ...
- Ribosome profiling|N-terminomics|蛋白质基因组学
生物医学大数据-蛋白质基因组学:质谱注释 蛋白质组与其他组学的关系便是互为印证:蛋白质基因组学原本用于基因组注释,后面扩展到蛋白质与转录组或可变剪接之间关系,同时,蛋白质组依赖于基因组注释作为验证.许 ...
- 转载【docker】CMD ENTRYPOINT 的使用方法
原文:https://blog.csdn.net/u010900754/article/details/78526443
- cs231n spring 2017 lecture13 Generative Models
1. 非监督学习 监督学习有数据有标签,目的是学习数据和标签之间的映射关系.而无监督学习只有数据,没有标签,目的是学习数据额隐藏结构. 2. 生成模型(Generative Models) 已知训练数 ...
- windows下apache运行环境搭建
apache的安装 要求: 1,不要安装到有中文的目录中: 2,尽量将apache,php,mysql安装到一个总的目录,便于管理.(如都建立在amp目录下,然后在该目录下分别建立apache,php ...
- <JZOJ5941>乘
emmm还挺妙 不过我没想到qwq 考场上瞎写的还mle了心碎 把b分两..预处理下 O1询问qwq #include<cstdio> #include<iostream> # ...
- 转:get value from agent failed: ZBX_TCP_READ() failed;[104] connection reset by peer
get value from agent failed: ZBX_TCP_READ() failed;[104] connection reset by peer zabbix都搭建好了,进行一下测试 ...
- 关于CLOSE BY CLIENT STACK TRACE
关于CLOSE BY CLIENT STACK TRACE 程序正常运行,数据库连接可以获取,一些列操作都可以实现,可在debug信息中总会一段时间就报如下错误: java.lang.Exceptio ...
- python os.path 模块常用方法
代码: import os apath = os.path.abspath(__file__) # 绝对路径 dirname = os.path.dirname(apath) basename = o ...