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

作为一个小白,思考之,从数学的角度,\(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 多条件查询的更多相关文章

  1. mysql in条件查询到底会不会用到索引

    MySQL 的 in 查询在 5.5 以上的版本中存储引擎都是 innodb 的,正常情况下会走索引的!至于 MyISAM 没试过! 如果是 5.5 之前的版本确实不会走索引的,在 5.5 之后的版本 ...

  2. python mysql 单表查询 多表查询

    一.外键 变种: 三种关系: 多对一 站在左表的角度: (1)一个员工 能不能在 多个部门? 不成立 (2)多个员工 能不能在 一个部门? 成立 只要有一个条件成立:多 对 一或者是1对多 如果两个条 ...

  3. Python MySQL - 进行数据查询

    #coding=utf-8 import mysql.connector import importlib import sys # reload(sys) # sys.setdefaultencod ...

  4. 06_Jedis完成MySQL的条件查询案例

    [概述] 假设现在有一个User表,其中有id,name,age,sex等字段,完成如下要求的SQL语句为: 1.查找所有age=18 的User ; 2.查找所有sex="M"( ...

  5. 【MySQL】条件查询之排序聚合分组分页查询

    排序查询 语法:order by 子句 order by 排序字段1 排序方式1 , 排序字段2 排序方式2... 排序方式: ASC:升序,默认的. DESC:降序. 注意: 如果有多个排序条件,则 ...

  6. mysql按条件查询当条件是数字的时候加不加引号是一样的。

    select * from user where id=1 select * from user where id="1" 在查询的注意是否需要加上"";

  7. python MySQL执行SQL查询结果返回字典

    写自动化测试的时候我希望执行数据库前置任务,把数据库查询的结果作为请求的参数,但是正常返回结果为列表嵌套里面,这样就会影响到关键字准确的获取,特别的受限于SQL的查询字段的的顺序,所以希望返回的单条数 ...

  8. python/MySQL练习题(二)

    python/MySQL练习题(二) 查询各科成绩前三名的记录:(不考虑成绩并列情况) select score.sid,score.course_id,score.num,T.first_num,T ...

  9. python 3 mysql sql逻辑查询语句执行顺序

    python 3 mysql sql逻辑查询语句执行顺序 一 .SELECT语句关键字的定义顺序 SELECT DISTINCT <select_list> FROM <left_t ...

随机推荐

  1. 同学你会hello world吗? 给我讲清楚点

    少点代码,多点头发 本文已经收录至我的GitHub,欢迎大家踊跃star 和 issues. https://github.com/midou-tech/articles 面试官超级喜欢问hello ...

  2. python pip命令的安装与实验安装scrapy

    大家在使用python时候,很多时候导入模块都会发现该模块不存在,那么我们就需要下载安装,可是有时候安装会出现各种问题,大家回去请教别人,大部分程序员会回答你:pip install 什么等,可是你p ...

  3. 将XML转换为实体

    需求 将XML文件中的数据经过转换后插入到数据库中. 参考 C#实体类和XML的相互转换 https://blog.csdn.net/pan_junbiao/article/details/82938 ...

  4. python初学者-从键盘获取信息

    name = input(">>> 姓名:") QQ = input(">>>QQ: ") phone_num = inpu ...

  5. 前端技术VUE 的前世今生从PC 走向移动

    一.Vue的前世 Vue 框架诞生于2014年,他的作者为中国人–尤雨溪(江苏无锡人).Vue用于构建交互式的Web界面的库,是一个构建数据驱动的Web界面渐进式框架,该框架遵循CMD规范,并且提供的 ...

  6. java代理(静态代理和jdk动态代理以及cglib代理)

    版权声明:本文为Fighter168原创文章,未经允许不得转载.   目录(?)[+]   说到代理,脑袋中浮现一大堆代理相关的名词,代理模式,静态代理,jdk代理,cglib代理等等. 记忆特别深刻 ...

  7. LayUI表单提交不走ajax原因

    在使用layui的时候.遇到一个问题.提交表单,没有走ajax,直接提交了表单页面. 原因是因为JQuery未引入 解决办法.引入JQuery或者使用layui自带Jquery var $ = lay ...

  8. 为什么 StackOverflow 上的代码片段会摧毁你的项目?

    昨天公司里碰到一件令人哑然失笑的事情.帮朋友公司做的一个项目,做SIT测试的时候发现一些bug,仔细查了下原因,原来是因为当初觉得这个项目比较简单,交给了几个新入职的新丁,也算是给他们练练手,结果其中 ...

  9. linux零基础之--常用命令

    linux: 用户命令 linux 目录切换命令 linux文件命令 linux : vi编辑器 linux:打包压缩

  10. SpringBoot自动加载路由前缀

    @RequestMapping() 将controller注册到容器中时需要加入路由地址,如果项目层数较深,地址会非常的长,并且有很多一样的路由前缀,每写一个controller都要重复一遍非常的麻烦 ...