一,预先定义内容

#关联表
followers = db.Table('followers',
db.Column('follower_id', db.Integer, db.ForeignKey('user.id')),
db.Column('followed_id', db.Integer, db.ForeignKey('user.id'))
)
Post.query.join(...).filter(...).order_by(...)

二,模型图示

用户表User

id username
1 john
2 susan
3 mary
4 david

关系表followers(当john关注susan和david时)

follower_id followed_id
1 2
1 4
2 3
3 4

帖子表Post

id text user_id
1 post from susan 2
2 post from mary 3
3 post from david 4
4 post from john 1

三,join方法

#join将创建一个临时表根据参数条件组合posts和followers表的数据
#条件为被关注者的id==帖子的id,即按照被关注这的帖子ID进行对应连接
Post.query.join(followers, (followers.c.followed_id == Post.user_id))

join连接结果如下

id text user_id follower_id followed_id
1 post from susan 2 1 2
2 post from mary 3 2 3
3 post from david 4 1 4
3 post from david 4 3 4

四,Filter方法

#注意方法定义在用户表里,所以self表示当前用户实例
filter(followers.c.follower_id == self.id)

Filter进行过滤只保留调用这个方法的用户

例如调用者john过滤后的结果如下

id text user_id follower_id followed_id
1 post from susan 2 1 2
3 post from david 4 1 4

五,order_by方法

对最后结果参考发布时间进行降序排列

order_by(Post.timestamp.desc())

最后连接起来即为

Posts=Post.query.join(followers,(followers.c.followed_id==Post.user_id)
).filter(followers.c.followed_id==self.id).order_by(Post.timestamp.desc())

Flask-SQLAlchemy笔记(一):通过query语句获取关注用户的帖子的更多相关文章

  1. 玩玩微信公众号Java版之五:获取关注用户信息

    在关注者与公众号产生消息交互后,公众号可获得关注者的OpenID(加密后的微信号,每个用户对每个公众号的OpenID是唯一的.对于不同公众号,同一用户的openid不同).公众号可通过本接口来根据Op ...

  2. 小D课堂-SpringBoot 2.x微信支付在线教育网站项目实战_5-7.授权登录获取微信用户个人信息实战

    笔记 7.授权登录获取微信用户个人信息实战         简介:讲解使用授权码code获取用户个人信息接口 关键点:看微信文档,字段尽量用拷贝 1.通过code获取access_token      ...

  3. 在Eclipse中用图形界面的方式获取Salesforce中Object的Query语句

    对Salesforce中的Object进行相应的Query是必不可少的操作,大家可以去这个链接去看看官网的解读  http://docs.database.com/dbcom/en-us/db_sos ...

  4. flask SQLAlchemy中一对多的关系实现

    SQLAlchemy是Python中比较优秀的orm框架,在SQLAlchemy中定义了多种数据库表的对应关系, 其中一对多是一种比较常见的关系.利用flask sqlalchemy实现一对多的关系如 ...

  5. Flask项目笔记

    一.jsonify  jsonify 是flask的函数,可以将字典转换成json数据返回给浏览器二. 钩子函数 @app.before_first_request:第一次请求调用,用于初始化数据 @ ...

  6. SQLAlchemy的查询操作Query

    查询操作 查询子句使用session的.query()方法来获取Query查询对象.查询对象能够使用一些方法来对应一些查询子句,比如.order_by(),.limit(),.filter()等. 查 ...

  7. Python利用flask sqlalchemy实现分页效果

    Flask-sqlalchemy是关于flask一个针对数据库管理的.文中我们采用一个关于员工显示例子. 首先,我们创建SQLALCHEMY对像db. from flask import Flask, ...

  8. dojo 学习笔记之dojo.query - query(id) 与query(class)的差别

    考虑这个样例:动态创建一个页面的时候,用new listtem()生成多个listitem, 且每一个listitem中都生成一个按钮button. 假设想要给每一个按钮都绑定一个click事件,用d ...

  9. 8.2 Query 语句优化基本思路和原则

    在分析如何优化MySQL Query 之前,我们需要先了解一下Query 语句优化的基本思路和原则.一般来说,Query 语句的优化思路和原则主要提现在以下几个方面: 1. 优化更需要优化的Query ...

随机推荐

  1. Pycharm有必要改的几个默认设置项

    最近在用Pycharm学习Python的时候,总有两个地方感觉不是很舒服,比如调用方法的时候区分大小写(thread就不会出现Thread,string就不会出现String)等,这让我稍稍有点不舒服 ...

  2. Pycharm控制台乱码问题

    PS:如我般的小白都会遇到中文乱码问题,那么怎么解决呢?其实非常简单,鼠标点点就好,请看下面: 如下乱码: 解决方法: 按如下步骤File→Settings→Editor→File Encodings ...

  3. Java课后总结-原码、补码、反码

    1.原码.补码.反码的定义和表示方法. 数在计算机中是以二进制形式表示的. 数分为有符号数和无符号数. 原码.反码.补码都是有符号定点数的表示方法. 一个有符号定点数的最高位为符号位,0是正,1是副. ...

  4. .net mvc接收参数为null的解决方案

    1.通过对象接收请求数据时的null 必须为对象的属性设置get与set private System.String _EMail = System.String.Empty; public Syst ...

  5. PP: Taking the human out of the loop: A review of bayesian optimization

    Problem: Design problem parameters consist of the search space of your model. Scientists design expe ...

  6. 基于Python接口自动化测试框架(初级篇)附源码

    引言 很多人都知道,目前市场上很多自动化测试工具,比如:Jmeter,Postman,TestLink等,还有一些自动化测试平台,那为啥还要开发接口自动化测试框架呢?相同之处就不说了,先说一下工具的局 ...

  7. django Warning: (3135, "'NO_ZERO_DATE', 'NO_ZERO_IN_DATE' and 'ERROR_FOR_DIVISION_BY_ZERO' sql modes

    django连接数据库配置设置如下 DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', 'NAME': 'test2', ...

  8. cursor 把鼠标指针的形状弄成一只伸出食指的手

    <span style="cursor:auto">auto</span><br> <span style="cursor:cr ...

  9. redis string类型 增删改查

    string一.设置 1.设置一个键值对时,如果该键已存在,那么就成了updata (key:value) 例: set name jiang 访问值:get name 2.设置值过期时间:setex ...

  10. python笔记-02

    Python基础知识 —————————————— A,B,先把A乘以3,然后加上B,最后在加上列表A A = [1, 2, 3, 4, 5, 6] 赋值 B = [1, 2, 3] 变量 定义一个变 ...