Python动态构建MySQL多条件模糊查询SQL语句
本文详解在Python中处理MySQL多条件模糊查询时,如何避免因部分参数为空(None)导致查询条件失效的问题。通过动态拼接SQL语句并判断参数非空后追加条件,确保查询逻辑正确。文章对比了直接拼接与占位符两种方式,提供可复用的代码思路。
def find_worldByName(c_name,continent):
print(c_name)
print(continent)
sql = " SELECT * FROM world WHERE 1=1 "
if(c_name!=None):
sql=sql+"AND ( c_name LIKE '%"+c_name+"%' )"
if(continent!=None):
sql=sql+" AND ( continent LIKE '%"+continent+"%') "
sql=sql+" AND dt=(SELECT dt FROM world order by dt desc limit 1) order by confirm desc "
# "AND continent LIKE '%%%%%s%%%%'" \
# " order by dt desc " %(c_name,continent)
# sql_temp = " SELECT * FROM world WHERE c_name LIKE '%"+c_name+"%' "
res = query(sql)
list= []
for i in res:
# print(i)
list.append(i)
return list;
背景:
前端页面的搜索框包含两个筛选条件,分别对应“国家”和“大洲”。
在数据库查询环节,若传入的国家参数值为None,直接使用AND连接SQL语句会导致该条件判定为false。
这会导致另一个查询条件“大洲”随之失效,无法返回预期结果。为防止此类参数错误影响查询,
在编写SQL语句时,需对参数是否为空进行判断,并据此逐层动态添加SQL片段。
思路:
首先初始化基础SQL语句:
sql = " SELECT * FROM world WHERE 1=1 "
随后逐层判断参数是否为空,若不为空则拼接相应的SQL条件:
if(c_name!=None):
sql=sql+"AND ( c_name LIKE '%"+c_name+"%' )"
if(continent!=None):
sql=sql+" AND ( continent LIKE '%"+continent+"%') "
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.
到此这篇关于Python使用sql语句对mysql数据库多条件模糊查询的思路详解的文章就介绍到这了,更多相关Python mysql多条件模糊查询内容请搜索本站以前的文章或继续浏览下面的相关文章希望大家以后多多支持本站!
本站声明
本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。













