1. 程式人生 > >python實現mysql多條件查詢篩選功能

python實現mysql多條件查詢篩選功能

目的:實現app列表篩選。

一、思路

原本是Java專案做的,感覺有些複雜,相反,Python程式碼較為簡潔,改用Python實現。

要想實現篩選,就要想辦法如何動態根據請求的條件寫sql語句,第一步要考慮的是如何更好的封裝請求到後臺,以便於根據條件動態的拼接sql語句。

二、條件封裝

首先將要所有要篩選的條件封裝成json資料在請求裡,形如:

{“MainCategories”: “0”,“strategy”: “0”,

“ManagementScale”: “0”,“MaximumDrawdown”:“0”,

“BusinessCity”: “0”,“NumOfFund”: “0”,

“NumberOfEmployees”: “0”,“EstablishedTime”: “0”,

“ContributedCapital”: “0”,“PositiveRatio”: “0”}

解釋一下:“MainCategories”: “0”,"MainCategories"代表單個條件(這只是我用到的,更具自己實際情況更換),"0"代表預設/不限,這是一個預設的情況。想要"MainCategories"的多個限制,可以傳:“MainCategories”: "1,2,3…:,這裡1,2,3代表相應的限制,比如MainCategories這個條件是主要型別包含“不限”、“會員”、“非會員”、“高階會員”,那麼0代表限制裡的“不限”,1代表“會員”,2代表“非會員”,3代表“高階會員”,這樣就可以完美的把想要的條件傳到後臺。其他條件原理一樣。

三、條件處理

然後重點來了,再看一下如何獲取json封裝的條件並且處理。

我用的龍捲風框架(tornado),直接獲取:

content = self.get_argument(“content”)//注:我請求的json資料的名字叫content。

此處封裝一個方法,ReadJson(content):將json資料傳過去。

方法內初始化sql條件:

sb = “” //注意,不是罵人,仿照java裡的StringBuilder的縮寫。

然後方法內首先要判斷所傳條件是否為空:

#若為空,直接返回空字串,不做條件限制,直接查詢全部。

if content == None or content =="":

return sb

#若json條件不為空,python解析json轉化為字典:

jsonObject = json.loads(client)//這裡jsonObject是一個字典。包含key,value,這就好處理了。

//下班回家了,未完待續。。。

11.1

接下來的得到了包含我們傳的條件的字典jsonObject,進行判斷具體的條件,下面以第一個條件為例:

#判斷“MainCategories”這個條件的值是否為空

if jsonObject is not None and jsonObject.get(“MainCategories”) is not None:

#此時封裝一個方法sqlPackage1()用來組裝單個條件的sql

#詳細見:四、單條件內部判斷、拼接

mcSql = sqlPackage1(jsonObject.get(“MainCategories”))

#若MainCategories這個條件不是傳的0,則代表不是不限,需要拼接單個條件的sql。

if not operator.eq(jsonObject.get(“MainCategories”),“0”):

#再次封裝一個方法,負責所有條件的處理(讓所有條件作為sql語句無縫連線)

#詳細見:五、處理多個條件拼接的橋樑方法

sb1 = ConnectComponents(sb, mcSql)

瀋陽性病醫院哪家好