首页 > 其他分享 >Flask ORM 学习笔记Part09:数据查询(上)

Flask ORM 学习笔记Part09:数据查询(上)

时间:2023-12-11 19:32:56浏览次数:29  
标签:Part09 Account Flask 查询 filter ORM import query 方法

前面的笔记,从Marshmallow开始就稍微有些跑题,今天记录一下如何使用Flask-SQLAlchemy进行数据查询。

查询

语法糖

在前文中,有定义过一系列的model类,这里一Account类作为示例。

from app import app
from model import *
from schema import *
from pprint import pprint
# from sqlalchemy import func

with app.app_context():
    a_s = AccountSchema()

    r1 = db.session.query(Account).filter(Account.id == 1).first()
    pprint(a_s.dump(r1))

    print("语法糖写法")
    r2 = Account.query.filter(Account.id == 1).first()
    pprint(a_s.dump(r2))

Flask ORM 学习笔记Part09:数据查询(上)_逻辑运算符


Account.query这是一种简化的查询方式,是 Flask-SQLAlchemy 提供的一种高级语法糖。它的背后是 db.session.query(Account) 的简写。通过 Account.query,你可以直接在模型类(例如 Account)上进行查询,而不需要显式地使用 db.session.query。这种方式更为简洁,适用于基本的查询操作。

filter与filter_by的查询条件

filterfilter_by 是 Flask-SQLAlchemy 中用于构建查询条件的两个方法,它们有一些区别:

  1. 使用方式:
  • filter 方法:
    filter 方法是更通用和灵活的方法,它可以接受任意的 SQL 表达式,条件可以使用比较运算符、逻辑运算符等。你可以使用 filter 方法来构建复杂的查询条件。
# 使用 filter 方法进行复杂的查询
Profile.query.filter(Profile.height > 160, Profile.fullname.like('王%')).all()
  • filter_by 方法:
    filter_by 方法更简化,它用于进行等值比较,只需要提供字段名和字段值即可。这个方法更适用于简单的等值条件。
# 使用 filter_by 方法进行等值比较
Profile.query.filter_by(fullname='王武').all()

完整代码

from app import app
from model import *
from schema import *
from pprint import pprint
# from sqlalchemy import func

with app.app_context():
    a_s = AccountSchema()
    print("使用filter方法")
    r1 = Profile.query.filter(Profile.height > 160, Profile.fullname.like('王%')).all()
    pprint(r1)
    print("使用filter_by方法")
    r2 = Profile.query.filter_by(fullname='王武').all()
    pprint(r2)

Flask ORM 学习笔记Part09:数据查询(上)_语法糖_02

  1. 参数形式:
  • filter 方法:
    filter 方法的参数是表达式,你可以使用 SQLAlchemy 提供的丰富功能的表达式语言,包括比较运算符、逻辑运算符等。
  • filter_by 方法:
    filter_by 方法的参数是字段名和字段值,用于进行等值比较。它提供了一种更简单的语法糖,适用于简单的查询条件。
  1. 组合查询条件:
  • filter 方法:
    filter 方法可以使用多个参数,这些参数之间默认是 AND 的关系。你可以通过使用逻辑运算符来组合条件,实现更复杂的查询。
  • filter_by 方法:
    filter_by 方法只能进行等值比较,而且参数之间默认是 AND 关系。对于多个条件的组合,需要使用多次调用 filter_by 或者结合使用 filter

综上所述,filter 方法更为通用和灵活,适用于构建复杂的查询条件,而 filter_by 方法更简化,适用于简单的等值比较。在实际使用中,可以根据查询的复杂度和灵活性需求选择使用其中一个方法。

标签:Part09,Account,Flask,查询,filter,ORM,import,query,方法
From: https://blog.51cto.com/quietguoguo/8776895

相关文章

  • relay interface (formerly relayfs) 【ChatGPT】
    https://www.kernel.org/doc/html/v6.6/filesystems/relay.html#relay-interface-formerly-relayfsRelayInterface(formerlyrelayfs)介绍Relay接口提供了一种方式,让内核应用能够通过用户定义的“中继通道”高效地将大量数据从内核传输到用户空间。一个“中继通道”是一种......
  • unity Transform 的 Rotate(xAngle: float, yAngle: float, zAngle: float, relativeT
    publicclassdemoword2:MonoBehaviour{//StartiscalledbeforethefirstframeupdatevoidStart(){//transform.Rotate(60,70,80,Space.World);//eulerAngles.z度围绕z轴,eulerAngles.x度围绕x轴,eulerAngles.y度围绕y轴//......
  • 简述—下ORM,并列举不少于两个应用实例
    简述—下ORM,并列举不少于两个应用实例ORM(Object-RelationalMapping)是一种编程技术,用于将对象模型和关系数据库之间建立映射,从而实现对数据库的操作更加方便、面向对象化。ORM框架负责将数据库表的记录映射为对象,同时也能将对象的操作映射为数据库的操作。以下是两个ORM的应用实......
  • Performance Improvements in .NET 8 & 7 & 6 -- Thread【翻译】
    线程.NET的最近版本在线程、并行、并发和异步等方面做出了巨大的改进,例如ThreadPool的完全重写(在.NET6和.NET7中),异步方法基础设施的完全重写(在.NETCore2.1中),ConcurrentQueue的完全重写(在.NETCore2.0中)等等。这个版本没有包含这样的大规模改革,但它确实包含了一......
  • FAILED: ParseException line 1:65 cannot recognize input near 'row' 'formatted' &
    hive报FAILED:ParseExceptionline1:65cannotrecognizeinputnear'row''formatted''delimited'intablerowformatspecification错误语句:insertoverwritelocaldirectory'/home/ljpbd/datas/student'rowformatteddel......
  • Retentive Networks Meet Vision Transformers, 视觉RetNet
    alias:Fan2023tags:RetNetrating:⭐share:falseptype:articleRMT:RetentiveNetworksMeetVisionTransformers初读印象comment::(RMT)RetentiveNetwork(RetNet)因其显式衰减机制而在自然语言处理中受到关注,但它不适合基于图像的任务。本文提出了保留性自我注意力......
  • BIIP 生物信息学与智能信息处理**年学术会议(BIIP20XX)Bioinformatics and Intelligen
    生物信息学与智能信息处理2023学术年会举行发布日期:2023年06月25日14:01 点击次数:1038[本站讯]近日,中国人工智能学会生物信息学与人工生命专业委员会生物信息学与智能信息处理2023学术年会(BIIP2023)在济南举行。中国科学院院士、天津大学教授元英进出席会议。山东大学副校长......
  • flask支持Vue2 mode history历史模式
    VueRouter配置在Vue2router里面增加constrouter=newVueRouter({mode:'history',base:'/admin/',//这里路径写你打包后的网址路径routes:[//这里是你的路由配置],});vue.config.js打包配置const{defineConfig}=require('@vue/cli-service......
  • Python+Flask SSTI 注入payload自动生成
    抛开代码丑不谈,用起来还是挺好用滴。fromflaskimportFlask,requestfromjinja2importTemplatefromthreadingimportThreadimportrequestsimportosimportsysurl_dict={"popen":[],"eval":[],"__import__":[],}scan_list......
  • PSI - Pressure Stall Information (压力停滞信息) 【ChatGPT】
    原文:https://www.kernel.org/doc/html/v6.6/accounting/psi.html#psi日期2018年4月作者[email protected]当CPU、内存或IO设备争用时,工作负载会出现延迟峰值、吞吐量损失,并面临OOM杀死的风险。缺乏对这种争用的准确衡量,用户不得不在谨慎使用硬件资源或频繁......