在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 模型一对多个人理解的更多相关文章

  1. 后盾网lavarel视频项目---模型一对多关联简单实例

    后盾网lavarel视频项目---模型一对多关联简单实例 一.总结 一句话总结: 在模型中定义一个方法来设置一对多关联:return $this->hasMany(Video::class); ...

  2. Flask 模型操作

    ORM 简称 ORM, O/RM, O/R Mapping 持久化模型 特征 数据表和编程类的映射 数据类型映射 字段属性映射类的属性和数据类型 关系映射 表于表之间的关系对应到 编程类的关系上 优点 ...

  3. 深度|OpenAI 首批研究成果聚焦无监督学习,生成模型如何高效的理解世界(附论文)

    本文经机器之心(微信公众号:almosthuman2014)授权转载,禁止二次转载,原文. 选自 Open AI 作者:ANDREJ KARPATHY, PIETER ABBEEL, GREG BRO ...

  4. 对Java内存模型即JMM的理解

    类似物理上的计算机系统,Java虚拟机规范中也定义了一种Java内存模型,即Java Memory Model(JMM),来屏蔽掉各种硬件和操作系统的内存访问差异,以实现让Java程序在各种平台下都能 ...

  5. 从GO内存模型与调用协议理解defer closure的坑

    资料参考: 官网defer介绍: https://blog.golang.org/defer-panic-and-recover 深入解析go: 多值返回: https://tiancaiamao.g ...

  6. 关于THINKPHP5模型关联的初步理解

    初步理解的意思是,使用最常用的关联模型,然后可以正常运行 还是打个比方 文章表  和文章分类表 一个文章分类可以有多个文章  所以  文章分类模型和文章建立 hasMany的关联 而文章和文章分类表则 ...

  7. Java内存模型解惑--观深入理解Java内存模型系列文章有感(二)

    1.volatile关键字修饰的域的特性 当我们声明共享变量为volatile后,对这个变量的读/写将会很特别.理解volatile特性的一个好方法是:把对volatile变量的单个读/写,看成是使用 ...

  8. CORS跨域模型浅析及常见理解误区分析

    CORS跨域资源共享是前后端跨域十分常用的一种方案,主要依赖Access-Control-Allow(ACA)系列header来实现一种协商性的跨域交互. 基本模型 其中的具体流程大致可以分为以下几步 ...

  9. 用一两句话说一下你对“盒模型”这个概念的理解,和它都涉及到哪些css属性

    网页设计中常听的属性名:内容(content).填充(padding).边框(border).边界(margin), CSS盒子模式都具备这些属性. 这些属性我们可以用日常生活中的常见事物——盒子作一 ...

随机推荐

  1. springboot学习笔记:4.logback日志配置

    springboot中日志组件推荐使用logback: 由于springboot内置了logback,所以可以直接在application.properties中配置:如果要功能丰富些,则配置下log ...

  2. Redis Client 官方下载地址

    下载地址:https://github.com/caoxinyu/RedisClient 界面 归途(LM)

  3. 深入 Java 调试体系: 第 1 部分,JPDA 体系概览

    JPDA 概述 所有的程序员都会遇到 bug,对于运行态的错误,我们往往需要一些方法来观察和测试运行态中的环境.在 Java 程序中,最简单的,您是否尝试过使用 System.out.println( ...

  4. python列表推导式(扫盲)

    1) 简单了解: 所谓的列表推导式,就是指的轻量级循环创建列表. 格式: 列表推导式的常见形式: my_list = [ item for item in iterable] my_list: 列表名 ...

  5. 吴裕雄--天生自然 人工智能机器学习实战代码:LASSO回归

    import numpy as np import matplotlib.pyplot as plt from sklearn import datasets, linear_model from s ...

  6. MariaDB 命令

    1.账号登入 mysql -u root -p 上述命令,“root” 是登入账号,上述命令回车后,则进行密码的输入 登入成功后如下: 2.创建用户命令 create user 'new_user'@ ...

  7. AtomicBoolean介绍

    网上资料: 使用 AtomicBoolean 高效并发处理 "只初始化一次" 的功能要求: 1 privatestatic AtomicBoolean initialized = ...

  8. 严谨与特色并行——WSDM 2015大会见闻记

    2015大会见闻记" title="严谨与特色并行--WSDM 2015大会见闻记"> 第8届ACM网络搜索与数据挖掘会议(ACM International Co ...

  9. JAVA学习大纲

    1.第一节 JAVA概念与JDK的安装 (1)JDK的安装和环境变量的设置: (2)相关基本概念:JDK.SDK.JRE.JVM.J2SE.J2EE.J2ME.java API.JAVA语言特点: ( ...

  10. Acwing 844.裸迷宫

    给定一个n*m的二维整数数组,用来表示一个迷宫,数组中只包含0或1,其中0表示可以走的路,1表示不可通过的墙壁. 最初,有一个人位于左上角(1, 1)处,已知该人每次可以向上.下.左.右任意一个方向移 ...