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盒子模式都具备这些属性. 这些属性我们可以用日常生活中的常见事物——盒子作一 ... 
随机推荐
- LR及评分卡(未完成)
			主要分为如下内容: 一.线性回归 二.逻辑回归 三.逻辑回归评分卡流程 一.线性回归 二.逻辑回归 在线性回归的基础上引入了sigmoid函数,Logistic回归为什么要使用sigmoid函数 三. ... 
- cs231n spring 2017 lecture15 Efficient Methods and Hardware for Deep Learning
			讲课嘉宾是Song Han,个人主页 Stanford:https://stanford.edu/~songhan/:MIT:https://mtlsites.mit.edu/songhan/. 1. ... 
- Python-SSH批量登陆并执行命令
			Python-SSH批量登陆并执行命令 #!/usr/bin/env python #-*- coding:utf-8 -*- import paramiko from time import cti ... 
- Spring第一课:IOC控制反转,什么是反转,什么又是控制?
			前言 学习Spring第一课,就是认识IOC控制反转,要了解它还真得花一些功夫.今天主要理解透彻它的真谛,而不仅限于表面. 上道小菜 public class BusinessService { pr ... 
- python3的数据类型转换问题
			问题描述:在自我学习的过程中,写了个登陆,在input处,希望能够对数据类型进行判断,但是因为python3的输入的数据会被系统默认为字符串,也就是1,1.2,a.都会被系统默认为字符串,这个心塞啊, ... 
- Python 模块之间的引用
			项目结构: Dog.Cat模块引用Animal模块 Animal模块代码: # -*- coding:UTF-8 -*- # 定义一个动物类 class Animal(object): def run ... 
- 项目搭建到Linux--实用笔记
			项目搭建到Linux--实用笔记 1.启动redis 目录 /usr/local/redis/bin (我自己的目录) 启动 ./redis-server redis. ... 
- 监控Linux系统所选的服务所占进程内存占用
			[代码] #!/bin/bash #程序功能描述: # 监控系统所选的服务所占进程内存占用 #作者:孤舟点点 #版本:1.0 #创建时间:-- :: PATH=/bin:/sbin:/usr/bin: ... 
- Network Saboteur (DFS)
			题目: A university network is composed of N computers. System administrators gathered information on t ... 
- lsync+rsync 实时同步(ubuntu16.04系统)
			1.同步端需要安装 lsync/rsyncapt-get install lsyncd rsync2.生成ssh公钥,粘贴到目标机器里面3.创建配置文件mkdir /etc/lsyncdcat /et ... 
