Flask-SQLAlchemy精確查詢&模糊查詢---ORM(1)

1.精確查詢

  • 單條件–精確查詢

from db_modules import Students
from flask_restful import reqparse, Resource


class StudentsAPI(Resource):
    def __init__(self):
        self.parser = reqparse.RequestParser()
        self.parser.add_argument("st_id", type=str)
        self.parser.add_argument("name", type=str)
        self.parser.add_argument("classID", type=str)
        self.parser.add_argument("remark", type=str)

    def get(self):
        args = self.parser.parse_args()

        key_st_id = args.st_id
        key_name = args.name
        key_classID = args.classID
        key_remark = args.remark

        all_results = Students.query.filter_by(classID=key_classID).all()

        data_list = list()
        if all_results:
            for i in all_results:
                dict_one = i.to_dict()
                print(dict_one, "--------")
                data_list.append(dict_one)

            value_msg = "success"
        else:
            value_msg = "couldn't search any infomation"

        result = {

            "status": 200,
            "msg": value_msg,
            "result": data_list

        }
        return result

輸入的內(nèi)容為:http://127.0.0.1:5000/student?classID=21

結(jié)果:
{
status: 200,
msg: "success",
result: [
            {
            classID: 21,
            gender: "1",
            st_id: 10001,
            remark: "小明是位可愛的孩子",
            age: 18,
            name: "小明"
            },
            {
            classID: 21,
            gender: "1",
            st_id: 10003,
            remark: "大牛是位勇敢的孩子",
            age: 19,
            name: "大牛"
            },
            {
            classID: 21,
            gender: "1",
            st_id: 10006,
            remark: "黑馬王子",
            age: 22,
            name: "古天樂"
            }
        ]
}
  • 多條件–精確查詢

# 將單條件中的查詢代碼改為下面的代碼

all_results = Students.query.filter_by(classID=key_classID, name=key_name).all()

2.模糊查詢

  • 1.單條件–模糊查詢

from db_modules import Students
from flask_restful import reqparse, Resource


class StudentsAPI(Resource):
    def __init__(self):
        self.parser = reqparse.RequestParser()
        self.parser.add_argument("st_id", type=str)
        self.parser.add_argument("name", type=str)
        self.parser.add_argument("classID", type=str)
        self.parser.add_argument("remark", type=str)

    def get(self):
        args = self.parser.parse_args()

        key_st_id = args.st_id
        key_name = args.name
        key_classID = args.classID
        key_remark = args.remark

        all_results = Students.query.filter(
            Students.remark.like("%" + key_remark + "%") if key_remark is not None else ""
        ).all()

        data_list = list()
        if all_results:
            for i in all_results:
                dict_one = i.to_dict()
                print(dict_one, "--------")
                data_list.append(dict_one)

            value_msg = "success"
        else:
            value_msg = "couldn't search any infomation"

        result = {

            "status": 200,
            "msg": value_msg,
            "result": data_list

        }
        return result

瀏覽器輸入:http://127.0.0.1:5000/student?remark=牛奶

結(jié)果:
{
    status: 200,
    msg: "success",
    result: [
                {
                classID: 22,
                gender: "1",
                st_id: 10007,
                remark: "不是所有牛奶都叫特侖蘇",
                age: 23,
                name: "陳道明"
                }
    ]
}
  • 多條件–模糊查詢

 all_results = Students.query.filter(
     Students.st_id.like("%" + key_st_id + "%") if key_st_id is not None else "",
     Students.name.like("%" + key_name + "%") if key_name is not None else "",
     Students.remark.like("%" + key_remark + "%") if key_remark is not None else "",
     Students.classID.like("%" + key_classID + "%") if key_classID is not None else ""
 ).all()

輸入地址:http://127.0.0.1:5000/student?name=明

結(jié)果:
{
    status: 200,
    msg: "success",
    result: [
            {
                classID: 21,
                gender: "1",
                st_id: 10001,
                remark: "小明是位可愛的孩子",
                age: 18,
                name: "小明"
            },
            {
                classID: 22,
                gender: "1",
                st_id: 10007,
                remark: "不是所有牛奶都叫特侖蘇",
                age: 23,
                name: "陳道明"
            }
            ]
}

3.精確 & 模糊混合查詢

  • 先精確查詢----再模糊查詢


 all_results = Students.query.filter_by(classID = key_classID).filter(
     Students.st_id.like("%" + key_st_id + "%") if key_st_id is not None else "",
     Students.name.like("%" + key_name + "%") if key_name is not None else "",
     Students.remark.like("%" + key_remark + "%") if key_remark is not None else ""
 ).all()

輸入地址:http://127.0.0.1:5000/student?name=明&classID=24

結(jié)果:
{
    status: 200,
    msg: "couldn't search any infomation",
    result: [ ]
}

輸入地址:http://127.0.0.1:5000/student?name=明&classID=22

結(jié)果:
{
    status: 200,
    msg: "success",
    result: [
                {
                classID: 22,
                gender: "1",
                st_id: 10007,
                remark: "不是所有牛奶都叫特侖蘇",
                age: 23,
                name: "陳道明"
                }
    ]
}
  • 多條件或查詢(or_)


from sqlalchemy import or_   # 這個是需要額外導(dǎo)入的方法

all_results = Students.query.filter(
            or_(Students.st_id.like("%" + key_st_id + "%") if key_st_id is not None else "",
                Students.name.like("%" + key_name + "%") if key_name is not None else "",
                Students.remark.like("%" + key_remark + "%") if key_remark is not None else "",
                Students.classID.like("%" + key_classID + "%") if key_classID is not None else "")
        ).all()

瀏覽器輸入:http://127.0.0.1:5000/student?name=花&st_id=10005&remark=牛奶
多個條件框往,每個條件單獨滿足即可,最終結(jié)果為所有集合的匯總

結(jié)果:
{
status: 200,
msg: "success",
result: [
            {
                classID: 22,
                gender: "0",
                st_id: 10004,
                remark: "花花是位懂事的孩子",
                age: 17,
                name: "花花"
            },
            {
                classID: 23,
                gender: "1",
                st_id: 10005,
                remark: "tony來自美國",
                age: 20,
                name: "tony"
            },
            {
                classID: 22,
                gender: "1",
                st_id: 10007,
                remark: "不是所有牛奶都叫特侖蘇",
                age: 23,
                name: "陳道明"
            }
            ]
}
  • 多條件或查詢(and_)


from sqlalchemy import and_   # 這個是需要額外導(dǎo)入的方法

all_results = Students.query.filter(
            and_(Students.st_id.like("%" + key_st_id + "%") if key_st_id is not None else "",
                Students.name.like("%" + key_name + "%") if key_name is not None else "",
                Students.remark.like("%" + key_remark + "%") if key_remark is not None else "",
                Students.classID.like("%" + key_classID + "%") if key_classID is not None else "")
        ).all()

這些基本的方法相互組合就可以滿足一般情況,當(dāng)然還有其他更復(fù)雜的功能,請參考文檔软啼,這里就不多做介紹。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末溉委,一起剝皮案震驚了整個濱河市点待,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌畴椰,老刑警劉巖臊诊,帶你破解...
    沈念sama閱讀 211,123評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異斜脂,居然都是意外死亡抓艳,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,031評論 2 384
  • 文/潘曉璐 我一進(jìn)店門帚戳,熙熙樓的掌柜王于貴愁眉苦臉地迎上來玷或,“玉大人,你說我怎么就攤上這事片任∑眩” “怎么了?”我有些...
    開封第一講書人閱讀 156,723評論 0 345
  • 文/不壞的土叔 我叫張陵对供,是天一觀的道長位他。 經(jīng)常有香客問我,道長,這世上最難降的妖魔是什么棱诱? 我笑而不...
    開封第一講書人閱讀 56,357評論 1 283
  • 正文 為了忘掉前任泼橘,我火速辦了婚禮,結(jié)果婚禮上迈勋,老公的妹妹穿的比我還像新娘炬灭。我一直安慰自己,他們只是感情好靡菇,可當(dāng)我...
    茶點故事閱讀 65,412評論 5 384
  • 文/花漫 我一把揭開白布重归。 她就那樣靜靜地躺著,像睡著了一般厦凤。 火紅的嫁衣襯著肌膚如雪鼻吮。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,760評論 1 289
  • 那天较鼓,我揣著相機與錄音椎木,去河邊找鬼。 笑死博烂,一個胖子當(dāng)著我的面吹牛香椎,可吹牛的內(nèi)容都是我干的禽篱。 我是一名探鬼主播淤刃,決...
    沈念sama閱讀 38,904評論 3 405
  • 文/蒼蘭香墨 我猛地睜開眼讯壶,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起狐赡,我...
    開封第一講書人閱讀 37,672評論 0 266
  • 序言:老撾萬榮一對情侶失蹤唯竹,失蹤者是張志新(化名)和其女友劉穎沸停,沒想到半個月后辆影,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,118評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡后添,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,456評論 2 325
  • 正文 我和宋清朗相戀三年笨枯,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片吕朵。...
    茶點故事閱讀 38,599評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡猎醇,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出努溃,到底是詐尸還是另有隱情硫嘶,我是刑警寧澤,帶...
    沈念sama閱讀 34,264評論 4 328
  • 正文 年R本政府宣布梧税,位于F島的核電站沦疾,受9級特大地震影響称近,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜哮塞,卻給世界環(huán)境...
    茶點故事閱讀 39,857評論 3 312
  • 文/蒙蒙 一刨秆、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧忆畅,春花似錦衡未、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,731評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至绊诲,卻和暖如春送粱,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背掂之。 一陣腳步聲響...
    開封第一講書人閱讀 31,956評論 1 264
  • 我被黑心中介騙來泰國打工抗俄, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人世舰。 一個月前我還...
    沈念sama閱讀 46,286評論 2 360
  • 正文 我出身青樓动雹,卻偏偏與公主長得像,于是被迫代替她去往敵國和親冯乘。 傳聞我的和親對象是個殘疾皇子洽胶,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,465評論 2 348

推薦閱讀更多精彩內(nèi)容

  • 一晒夹、數(shù)據(jù)庫簡介 1.數(shù)據(jù)庫系統(tǒng) 1.1數(shù)據(jù)庫 DataBase【DB】裆馒,指的是長期保存到計算機上的數(shù)據(jù),按照一定順...
    鄭元吉閱讀 594評論 0 6
  • 一. Java基礎(chǔ)部分.................................................
    wy_sure閱讀 3,805評論 0 11
  • 一:MySQL簡介與安裝 MySQL是一種中型丐怯、易用的關(guān)系型數(shù)據(jù)庫管理系統(tǒng)(DBMS,Database Man...
    仙靈兒閱讀 1,189評論 0 0
  • ORACLE自學(xué)教程 --create tabletestone ( id number, --序號usernam...
    落葉寂聊閱讀 1,069評論 0 0
  • 創(chuàng)建模式 工廠 factory 普通:給我說你要什么 多個:想要哪個要哪個 靜態(tài):不用再找我喷好,直接拿 虛擬:你要建...
    CrazyGod閱讀 131評論 0 0