python Mysql 多条件查询
做项目时,遇到一场景,前端至少传入一个参数,最多传入四个参数,根据单参数或者组合参数,从数据库筛选数据。

作为一个小白,思考之,从数学的角度,\(C_4^1 + C_4^2+C_4^3+C_4^4=15\),靠,写SQL要写15种?
放弃,试图寻找简便方法,寻之半天,未果。
默默接受了寻找捷径所损耗的时间还不如直接用原始的方法,老老实实,一个一个一个一个(还有11个一个)的写。
可写的时候内心始终在挣扎,写到一半时,r忍不住,找大神问了问。
大神曰:“傻不傻逼?为啥要传参!!!传参传死人。构造形式拼接啊,前端接入的参数,用字典接收,然后,将参数字典转换为字符串,在拼接到SQL语句后,构成SQL语句。”
醍醐灌顶,有没有?
下面记录原过程以及新代码如下,如有相似情境,可借鉴。
原代码结构
(代码过多,只看结构,PS:还没写完的条件。。)

经大神指点后的代码:
def user_list_post(username=None, phone=None, dispost_status=None, agentname=None):
dic = {"`userName`": username,
"`phoneNumber`": phone,
"`dispost`": dispost_status,
"`agentName`": agentname}
print(dic)
sr = ""
if dic["`dispost`"] == "已缴纳":
dic["`dispost`"] = "200"
elif dic["`dispost`"] == "未缴纳":
dic["`dispost`"] = "0"
for k, v in dic.items():
if v:
sr += k + " = " + "'" + v + "'"+ " and "
print(sr.rstrip(" and "), 2222)
sql_fro = """select * from
(select user_list.`userId`, user_list.`userName`, order_list.`agentName`,
user_list.`headUrl`, user_list.`phoneNumber`, user_list.`balance`,
user_list.`dispost`, user_list.`registerTime`
from order_list join user_list on order_list.`userId` = user_list.`userId`)
as tmp
where """
sql = sql_fro + sr.rstrip(" and ")
print(sql, 33333)
sql_datas = mysql_func(sql)
# print(sql_datas)
user_datas = list()
for sql_data in sql_datas:
user_dic = dict()
userId = sql_data[0]
userName = sql_data[1]
agentName = sql_data[2]
headUrl = sql_data[3]
phoneNumber = sql_data[4]
balance = sql_data[5]
dispost = sql_data[6]
registerTime = sql_data[7]
user_dic["userId"] = userId
user_dic["userName"] = userName
user_dic["agentName"] = agentName
user_dic["headUrl"] = headUrl
user_dic["phoneNumber"] = phoneNumber
user_dic["balance"] = balance
if int(dispost) > 0:
user_dic["dispost_status"] = "已缴纳"
else:
user_dic["dispost_status"] = "未缴纳"
user_dic["registerTime"] = registerTime
user_datas.append(user_dic)
return user_datas
构造形式2
def consumer_order_post(start_time=None, end_time=None, order_number=None,
user_name=None, phone_number=None, agent_name=None):
"""
查询条件
:param start_time: 开始条件
:param end_time: 结束条件
:param order_number: 订单编号
:param user_name: 用户昵称
:param phone_number: 手机号
:param agent_name: 代理商
:return:
"""
dic = {"A.`startTime`": start_time,
"A.`endTime`": end_time,
"A.`orderNumber`": order_number,
"A.`userName`": user_name,
"A.`phoneNumber`": phone_number,
"A.`agentName`": agent_name
}
sr = ""
char = {"1": ">=",
"2": "<=",
"3": "="}
for key, value in dic.items():
if value:
if key == "A.`startTime`":
tmp = char.get("1")
elif key == "A.`endTime`":
tmp = char.get("2")
else:
tmp = char.get("3")
sr += key + tmp + "'" + value + "'" + " and "
print(sr.rstrip(" and "))
python Mysql 多条件查询的更多相关文章
- mysql in条件查询到底会不会用到索引
MySQL 的 in 查询在 5.5 以上的版本中存储引擎都是 innodb 的,正常情况下会走索引的!至于 MyISAM 没试过! 如果是 5.5 之前的版本确实不会走索引的,在 5.5 之后的版本 ...
- python mysql 单表查询 多表查询
一.外键 变种: 三种关系: 多对一 站在左表的角度: (1)一个员工 能不能在 多个部门? 不成立 (2)多个员工 能不能在 一个部门? 成立 只要有一个条件成立:多 对 一或者是1对多 如果两个条 ...
- Python MySQL - 进行数据查询
#coding=utf-8 import mysql.connector import importlib import sys # reload(sys) # sys.setdefaultencod ...
- 06_Jedis完成MySQL的条件查询案例
[概述] 假设现在有一个User表,其中有id,name,age,sex等字段,完成如下要求的SQL语句为: 1.查找所有age=18 的User ; 2.查找所有sex="M"( ...
- 【MySQL】条件查询之排序聚合分组分页查询
排序查询 语法:order by 子句 order by 排序字段1 排序方式1 , 排序字段2 排序方式2... 排序方式: ASC:升序,默认的. DESC:降序. 注意: 如果有多个排序条件,则 ...
- mysql按条件查询当条件是数字的时候加不加引号是一样的。
select * from user where id=1 select * from user where id="1" 在查询的注意是否需要加上"";
- python MySQL执行SQL查询结果返回字典
写自动化测试的时候我希望执行数据库前置任务,把数据库查询的结果作为请求的参数,但是正常返回结果为列表嵌套里面,这样就会影响到关键字准确的获取,特别的受限于SQL的查询字段的的顺序,所以希望返回的单条数 ...
- python/MySQL练习题(二)
python/MySQL练习题(二) 查询各科成绩前三名的记录:(不考虑成绩并列情况) select score.sid,score.course_id,score.num,T.first_num,T ...
- python 3 mysql sql逻辑查询语句执行顺序
python 3 mysql sql逻辑查询语句执行顺序 一 .SELECT语句关键字的定义顺序 SELECT DISTINCT <select_list> FROM <left_t ...
随机推荐
- Spark内核-Spark Shuffle 解析
作者:十一喵先森 链接:https://juejin.im/post/5e1c41c6f265da3e152d1e62 来源:掘金 著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出处. ...
- Python高级语法-贯彻回顾-元类(4.99.1)
@ 目录 1.为什么要掌握元类 2.正文 关于作者 1.为什么要掌握元类 在django中编写models的时候遇到了元类的相关操作 并且在mini-web框架编写的时候也遇到了相关的问题 意识到深入 ...
- Python高级语法-import导入-sys.path(4.4.1)
@ 目录 1.说明 2.代码 关于作者 1.说明 在开发程序的过程中,往往使用sys.path去验证下导入的目录,返回的是列表 先后顺序,就是扫描的先后顺序 ,也可以加入搜索路径 import有个特点 ...
- Python之复制列表
将一个列表的数据复制到另外一个列表中. 1 a = [1,2,3] #定义列表a 2 3 b = a[:] #将列表a的切片赋值给b,也可以理解为将b的值设置为a[:] 4 5 print(a) #打 ...
- asp.net url参数中有中文request.querystring 乱码
说明: 从这点我们发现:所有的参数输入,都调用了一次:HttpUtility.UrlDecode(str2, encoding); 结论出来了: 当客户端js对中文以utf-8编码提交到服务端时,用R ...
- 检验实时3D像素流送平台好坏的七个标准!(上)
将交互式3D像素流送技术作为有价值的企业工具之后,就该寻找像素流送服务供应商了.问题在于交互式3D像素流送是一种新兴技术,因此很难知道要问供应商的正确问题.在开始使用之前,这里有7个问题,您应该从候选 ...
- 2.k8sPod、控制器、service
一.Pod生命周期 Pod是k8s中最小的管理单元(逻辑上存在,实际不存在),是一组容器的集合 同一个Pod中的容器共享网络和存储(通过pause容器实现),由一个统一的IP向集群内部提供服务 Pod ...
- 安利一个基于Spring Cloud 的面试刷题系统。面试、毕设、项目经验一网打尽
推荐: 接近100K star 的Java学习/面试指南 Github 95k+点赞的Java面试/学习手册.pdf 今天给小伙伴们推荐一个朋友开源的面试刷题系统. 这篇文章我会从系统架构设计层面详解 ...
- Mac苹果电脑单片机开发
1.安装虚拟机 可以阅读往期文章:Mac苹果电脑安装虚拟机 2.在虚拟机上安装CH340驱动,keil4,PZ-ISP, 下载 CH340驱动安装 下载keil4破解及汉化 下载普中科技烧录软件
- Java学习日报7.20
//7.20 三个和尚比身高import java.util.Scanner; //导包public class Hello{ public static void main(String[] arg ...