Python使用sql语句对mysql数据库多条件模糊查询

复制代码
 1 def find_worldByName(c_name,continent):
 2     print(c_name)
 3     print(continent)
 4     sql = " SELECT * FROM world WHERE  1=1 "
 5     if(c_name!=None):
 6         sql=sql+"AND ( c_name LIKE '%"+c_name+"%' )"
 7     if(continent!=None):
 8         sql=sql+" AND ( continent LIKE '%"+continent+"%') "
 9     sql=sql+" AND dt=(SELECT dt FROM world order by dt desc limit 1) order by confirm desc "
10 
11           # "AND continent LIKE '%%%%%s%%%%'" \
12           # " order by dt desc " %(c_name,continent)
13     # sql_temp = " SELECT * FROM world WHERE c_name LIKE '%"+c_name+"%' "
14     res = query(sql)
15     list= []
16     for i in res:
17         # print(i)
18         list.append(i)
19     return list;
复制代码

背景:

页面的搜索框是有两个搜索条件,一个是国家,一个是大洲。

那么在数据库查询的时候就会出现问题,如果国家传的值是None那么使用AND连接的sql语句这个条件会被

整体判定为false,也就是另一个查询条件 “大洲 ”就会作废,为了防止参数出现这样的错误。需要在写sql语

句的时候对参数是否为空加一个判断条件,然后逐层添加sql语句。

思路:

首先使用开头的一个sql语句:

sql = " SELECT * FROM world WHERE 1=1 "

之后逐层判定参数是否为空,再拼接sql语句:

 

 5     if(c_name!=None):
 6         sql=sql+"AND ( c_name LIKE '%"+c_name+"%' )"
 7     if(continent!=None):
 8         sql=sql+" AND ( continent LIKE '%"+continent+"%') "
 9     sql=sql+" AND dt=(SELECT dt FROM world order by dt desc limit 1) order by confirm desc "

 

 


 

 

还有一个地方需要注意:
sql语句传参数,参数是一个变量,有两种方式:
① 直接拼接到sql语句中:
var c_name="test"
sql_temp = " SELECT * FROM world WHERE c_name LIKE ' %"+c_name+"% '"
② 使用占位符%代替,在语句末尾再替换占位符:
sql = " SELECT * FROM world WHERE c_name LIKE '%%%%%s%%%%' AND continent LIKE '%%%%%s%%%%'" %(c_name,continent)

 

 

 

 Tomorrow the birds will sing.

posted @   靠谱杨  阅读(1253)  评论(0编辑  收藏  举报
编辑推荐:
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具

喜欢请打赏

扫描二维码打赏

了解更多

点击右上角即可分享
微信分享提示