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 ...
随机推荐
- sqli-labs 20-22 --cookie注入
异常处理 一开始打开这个题目的时候找不到cookie... 登录成功就是没有cookie cookie注入没有cookie... 第二天重新做的时候,同学讲自己设置cookie可以用 用插件EditT ...
- http详解笔记
http详解笔记 http,(HyperText Transfer Protocol),超文本传输协议,亦成为超文本转移协议 通常使用的网络是在TCP/IP协议族的基础上运作的,HTTP属于它的一 ...
- kvm环境部署及常用指令
Linux下通过kvm创建虚拟机,通过vnc连接,做好配置后,通过ssh登录,并开启iptables Kvm虚拟化搭建教程参考链接:https://jingyan.baidu.com/article/ ...
- Windows 上安装 PostgreSQL
PostgreSQL官网–>Download–>Windows 64位,如图所示: (1)官网: https://www.postgresql.org/ (2)Download: http ...
- 前台js获取url传递参数(后台Request.QueryString接收)
方法 封装 function GetQueryString(name) { var reg = new RegExp("(^|&)" + name + "=([^ ...
- 【Tomcat】手写迷你版Tomcat
目录 源码地址 一,分析 Mini版Tomcat需要实现的功能 二,开发--准备工作 2.1 新建Maven工程 2.2 定义编译级别 2.3 新建主类编写启动入口和端口 三,开发--1.0版本 3. ...
- flowable获取上级主管
//主管 Dept managerDept = deptUserUtil.getManagerDept(bean.getCreateDept(),bean.getCreateUser()); //上级 ...
- js:表单校验(获取元素、事件)
1.表单校验步骤 (1)确定事件(submit事件),创建一个函数并和该事件绑定. (2)书写函数对输入的数据是否合法进行校验(需要设定ID并通过ID来获取用户输入的数据的值). (3)输入的信息合法 ...
- windows和Linux的文件路径
(1)windows的文件路径格式"E:\Python\workplace\codes"单反斜杠的方式,但是在很多编程语言中会不认识"\"字符,可能会把它识别成 ...
- maven打包 依赖jar与不依赖jar
?xml version="1.0" encoding="UTF-8"?> <assembly xmlns="http://maven.a ...