SQLAlchemy中filter_by()和filter()的用法不同

filter_by() 和 filter() 的最主要的區別:

模塊語法><(大于和小于)查詢and_和or_查詢
filter_by()直接用屬性名,比較用=不支持不支持
filter()用類名.屬性名,比較用==支持支持

談 filter_by() 的語法之前先看下 filter_by() 的內部源碼,去掉注釋之后如下:

    def filter_by(self, **kwargs):clauses = [_entity_descriptor(self._joinpoint_zero(), key) == valuefor key, value in kwargs.items()]return self.filter(sql.and_(*clauses))

可以看出,filter_by() 只接受鍵值對參數,所以 filter_by() 不支持><(大于和小于)和 and_、or_查詢

?

user表

filter_by()
?????? 查詢 user 表里面名字等于 Tom 的:
???????db.session.query(User).filter_by(name='Tom').all()
?????? 查詢 user 表里面名字等于 Tom?并且年齡等于 18:
???????db.session.query(User).filter_by(name='Tom', age=18).all()
?????? 比如新的需求,查詢 user 表里面名字等于 Tom?或者年齡等于 18 的用戶,那么 filter_by() 就滿足不了要求了

filter()
?????? 查詢 user 表里面名字等于 Tom 的:
???????db.session.query(User).filter(User.name == 'Tom').all()
?????? 查詢 user 表里面名字等于 Tom 并且年齡等于 18:
???????db.session.query(User).filter(User.name == 'Tom', User.age == 18).all()
?????? 也可以這樣:
???????db.session.query(User).filter(User.name == 'Tom').filter(User.age == 18).all()
?????? 如果想使用 and 拼接需要用以下方式:
???????db.session.query(User).filter(and_(User.name == 'Tom', User.age == 18)).all()
?????? 以下的方式 and 后面的 User.age == 18 不會生效:
???????db.session.query(User).filter(User.name == 'Tom' and User.age == 18).all()
?????? 查詢 user 表里面名字等于 Tom 的或者年齡等于 18:
???????db.session.query(User).filter(or_(User.name == 'Tom', User.age == 18)).all()
?????? 查詢 user 表里面名字等于 Tom 的并且年齡大于 18
???????db.session.query(User).filter(User.name == 'Tom', User.age > 18).all()
?????? 查詢 name 中包含字母 a 的所有數據(模糊查詢)
???????db.session.query(User).filter(User.name.like('%{0}%'.format("a"))).all()

以上的例子都是查詢中使用比較多的,使用方面看大家喜好,filter_by() 對組合查詢等等支持的不是很好,但是語法相對 filter() 簡潔一些; 另外 filter() 還有很多其他的查詢,大家可以自己去多多探討。。。

筆記:

?

?

現在有 mysql 的 user 數據庫表,存儲內容如下圖,下面通過例子來說明兩種查詢方式的用法:

在一個用戶的模型類中, 要查詢id為5的一個用戶;

User.query.filter(User.id==5).all() ?# ?使用filter 中必須指定那個 模型類.id==5;?

User.query.filter(User.id==5).first() ?#?all() , first() ,都是查詢執行器 , 一個返回列表包含對象, 一個直接返回對象;

User.query.filter_by(id=5).first() ?#?filter_by默認就是使用id ?進行查詢 , 寫法為id=5; 不可以使用==; 也不用模型類.id的方式; 它是一種更加精確的查詢;

?

?

# users = User.query.filter_by(isdelete=False).all()? ? ? ? 用等值符號


# users = User.query.filter(User.isdelete == False,

? ? ? ? ? ? ? ? ? ?User.phone.startswith('150')).order_by(-User.rdatetime)? 用關系符號 升序降序正負號


users = User.query.filter(or_(User.username==search,?User.phone == search)).all()? # select * from user where username=search or phone=search


number = User.query.filter(or_(User.username==search,User.phone == search)).count()


users = User.query.filter(or_(User.username.like('%' + search + '%'), User.phone == search)).all()? #返回的是列表


number = User.query.filter(or_(User.username.like(search), User.phone == search)).count()? ?
???

?

<a href="javascript:0;" onclick="del({{user.id}})">刪除</a> 跳過hrf 執行js腳本

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/456346.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/456346.shtml
英文地址,請注明出處:http://en.pswp.cn/news/456346.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

python爬蟲從入門到放棄(六)之 BeautifulSoup庫的使用

上一篇文章的正則&#xff0c;其實對很多人來說用起來是不方便的&#xff0c;加上需要記很多規則&#xff0c;所以用起來不是特別熟練&#xff0c;而這節我們提到的beautifulsoup就是一個非常強大的工具&#xff0c;爬蟲利器。 beautifulSoup “美味的湯&#xff0c;綠色的濃湯…

SparkHiveSQL中Join操作的謂詞下推?

前言&#xff1a; SparkSQL和HiveSQL的Join操作中也有謂詞下推&#xff1f;今天就通過大神的文章來了解下。同樣&#xff0c;如有冒犯&#xff0c;請聯系。 正文 上文簡要介紹了Join在大數據領域中的使用背景以及常用的幾種算法&#xff0d;broadcast hash join 、shuffle h…

【轉載】通過金礦模型介紹動態規劃 (動態規劃入門)

先附上原文地址&#xff1a;http://www.cnblogs.com/sdjl/articles/1274312.html 通過金礦模型介紹動態規劃 對于動態規劃&#xff0c;每個剛接觸的人都需要一段時間來理解&#xff0c;特別是第一次接觸的時候總是想不通為什么這種方法可行&#xff0c;這篇文章就是為了…

flask模型中【外鍵】relationship的使用筆記

模型中relationship的使用筆記 模型.PY class User(db.Model):# __tablename__ user1 #定義表名id db.Column(db.Integer, primary_keyTrue, autoincrementTrue)username db.Column(db.String(10), nullableTrue)password db.Column(db.String(64), nullableTrue)phone …

六種方式實現生產者消費者(未完)

2019獨角獸企業重金招聘Python工程師標準>>> 一、利用Object對象是wait和notify\notifyAll package com.jv.parallel.consumerandproducer.objectwait;public class Car {private volatile int flag 0;public void showConsumer(){System.out.println("I am a…

SQL中基于代價的優化

還記得筆者在上篇文章無意中挖的一個坑么&#xff1f;如若不知&#xff0c;強烈建議看官先行閱讀前面兩文&#xff0d;《SparkSQL Join原理》和《Join中竟然也有謂詞下推?》 第一篇文章主要分析了大數據領域Join的三種基礎算法以及各自的適用場景&#xff0c;第二篇文章在第一…

git如何解決沖突(代碼托管在coding)

分支A提交合并請求到分支B&#xff0c;有沖突git fetch code 拉取遠程倉庫的其他分支代碼&#xff08;我拉代碼是remote add code所以這里是code,可以用git remote查看&#xff09;git checkout 分支A 切換到分支Agit pull code 分支A 拉取分支A代碼git checkout 分支B 切換到分…

cookie和session之會話機制: ? http 協議? ---》 無狀態協議

設置cookie&#xff1a; 通過response對象&#xff1a; response make_response() response.set_cookie(key,value,max_age(單位second),expires(要求是detetime類型)) expires datetime(year2018,month11,day5) #expires是這么設置的 expires datetime.n…

Java Map 怎樣實現Key 的唯一性?

大家都知道。在Map和Set不可存在反復元素&#xff1f; 可是對于內部的細節我們并不了解。今天我們就一塊來 探討一下&#xff01; 1 對于 HashMap HashSet 他們的底層數據結構的實現是&#xff1a;維護了一張 HashTable 。容器中的元素所有存儲在Hashtable 中。他們再加入…

win10下安裝pyspark及碰到的問題

文章目錄前言安裝過程Q1總結&#xff1a;前言 最近由于工作需要&#xff0c;需要了解下pyspark&#xff0c;所以就在win10環境下裝了下&#xff0c;然后在pycharm中使用的時候碰到了一些問題。整個過程可謂是一波三折。下面一一道來。 安裝過程 安裝過程就不詳細說了&#x…

解決AttributeError AttributeError: 'NoneType' object has no attribute 'filename'

原因忘記上傳文件 表單需要加屬性 enctype"multipart/form-data" 否則報錯&#xff01;AttributeError AttributeError: NoneType object has no attribute filename enctype"multipart/form-data是設置表單的MIME編碼。默認情況&#xff0c;這個編碼格式是ap…

SQLAlchemy()分頁器paginate方法

Flask的數據分頁示例 用法&#xff1a; 1&#xff0c;首先寫數據獲取的視圖函數&#xff0c;就像這樣&#xff1a; # 首頁 blog_bp.route(/, endpointindex) def index():#獲取頁數page request.args.get(page,1)paginate Article.query.paginate(pageint(page),per_page3)…

開源中國 2014 年源創會年度計劃

時光總是從敲代碼的指尖不經意地滑過&#xff0c;轉眼2014年已快過去一半&#xff0c;OSC依然心懷著最初的夢想。 源創會&#xff0c;oscer的線下快樂大本營&#xff0c;我們仍在繼續...... 聆聽技術大牛講解最前沿的技術&#xff0c;和同道中人切磋IT秘籍&#xff0c;吃點心侃…

互聯網金融行業申請評分卡(A卡)簡介

文章目錄前言基本概念1、信用違約風險的基本概念什么是信用違約風險&#xff1a;組成部分違約的主體個貸中常用的違約定義M0&#xff0c;M1&#xff0c;M2的定義2、申請評分卡的重要性和特性信貸場景中的評分卡申請評分卡的概念為什么要開發申請評分卡評分卡的特性 &#xff08…

Flask的csrf_token的用法

在flask當中&#xff0c;flask-wtf模塊時攜帶csrf校驗的&#xff0c;只是需要開啟&#xff1b; 如果不開啟校驗就不需要校驗&#xff0c;但是那樣不安全。 Csrf是針對與post請求的跨域限制&#xff0c;get請求沒有作用 csrf_token的開啟 在flask中開啟csrf保護 from flask_…

dotty編譯器語法特性之一交叉類型,聯合類型和文本單例類型

2019獨角獸企業重金招聘Python工程師標準>>> ###翻譯&#xff1a;http://dotty.epfl.ch/docs/reference/intersection-types.html #交叉類型 trait Resettable {def reset(): this.type } trait Growable[T] {def add(x: T): this.type } def f(x: Resettable &…

【轉】Zookeeper 安裝和配置

轉自&#xff1a;http://coolxing.iteye.com/blog/1871009 Zookeeper的安裝和配置十分簡單, 既可以配置成單機模式, 也可以配置成集群模式. 下面將分別進行介紹. 單機模式 1. 配置 點擊這里下載zookeeper的安裝包之后, 解壓到合適目錄. 進入zookeeper目錄下的conf子目錄, 創建z…

一分鐘精通Flask-Bootstrap的使用

要想在程序中集成Bootstrap&#xff0c;顯然要對模板做所有必要的改動。不過&#xff0c;更簡單的方法是使用一個名為Flask-Bootstrap 的Flask 擴展&#xff0c;簡化集成的過程。 安裝&#xff1a; Flask-Bootstrap 使用pip安裝&#xff1a; pip install flask_bootstrap Fl…

linux生產環境下安裝anaconda總結

前言&#xff1a; 工作中&#xff0c;常常要在新的linux生產服務器中安裝自己的集成python環境&#xff0c;這種情況下有一點需要注意&#xff1a;不能覆蓋生產服務器中的python環境&#xff08;也就是自己的python環境要和系統的python環境分開&#xff09;。一般情況下系統自…

Delphi TScrollBar 用于滾動窗口、組件內容

滾動條組件&#xff08;TScrollBar&#xff09;此組件是一個Windows滾動條&#xff0c;用于滾動窗口、組件內容。許多控制有滾動條屬性&#xff0c;它們把滾動條作為自己的一部分&#xff0c;對于沒有完整滾動條的控制&#xff0c;TScrollBar組件提供了一個附加的功能&#xff…