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)
瀋陽性病醫院哪家好