python有条件查询mysql_python Mysql 多条件查询

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

作为一个小白,思考之,从数学的角度,\(C_4^1 + C_4^2+C_4^3+C_4^4=15\),靠,写SQL要写15种?

放弃,试图寻找简便方法,寻之半天,未果。

默默接受了寻找捷径所损耗的时间还不如直接用原始的方法,老老实实,一个一个一个一个(还有11个一个)的写。

可写的时候内心始终在挣扎,写到一半时,仍不住,找大神问了问。

大神曰:“傻不傻逼?为啥要传参!!!传参传死人。构造形式拼接啊,前端接入的参数,用字典接收,然后,将参数字典转换为字符串,在拼接到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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值