如何将字典映射转换为排除空值的MySQL查询语句?
解决SQL查询语句生成的字符串拼接问题
给定字典:
queryParameters = { "email": None, "party_type": "BUYER", "mobile": "9953610508" }
需要生成排除None值的SQL查询语句,期望结果:
select id from tff_party where deleted_at is null and mobile=9953610508 and party_type='BUYER';
原代码存在以下问题:
- 每次循环都会覆盖
res变量,最终只保留最后一个非None的键值对 - 未给字符串类型的值添加单引号,不符合SQL语法
- 未拼接固定条件
deleted_at is null,也没有用and连接多个条件
修正后的代码实现
queryParameters = { "email": None, "party_type": "BUYER", "mobile": "9953610508" } # 初始化条件列表,包含固定的软删除过滤条件 conditions = ["deleted_at is null"] for key, value in queryParameters.items(): if value is not None: # 根据值的类型处理引号,字符串类型需用单引号包裹 if isinstance(value, str): condition = f"{key}='{value}'" else: condition = f"{key}={value}" conditions.append(condition) # 用"and"连接所有条件,拼接成完整WHERE子句 where_clause = " and ".join(conditions) # 生成完整SQL语句 sql_statement = f"select id from tff_party where {where_clause};" print(sql_statement)
代码说明
- 使用
items()遍历字典,同时获取键和值,避免重复查询字典 - 用列表收集所有条件,最后通过
join方法拼接,避免出现多余的and - 针对字符串类型的值添加单引号,确保SQL语法正确
- 预先加入固定条件
deleted_at is null,符合需求中的查询规则
内容的提问来源于stack exchange,提问作者Rishabh Arya
相关产品推荐
相关产品推荐

