如何修复当前日期在数据库记录列表中匹配返回False的问题
解决日期存在性判断返回False的问题
嗨,这个问题我之前也碰到过!核心原因很简单:你的result_set里的每一项都是包含两个元素的元组(比如(0L, datetime.date(2018, 1, 29))),但你拿单独的cd_dt(一个datetime.date对象)去判断是否在这个集合里,自然匹配不到——因为集合里根本没有单独的日期对象,只有嵌套的元组。
给你几个可行的解决方法:
方法1:提取所有日期到单独集合(推荐,高效)
把结果里的日期都抽出来存到一个集合里,再做存在性判断,集合的查询效率很高:
# 从结果集合中提取所有日期,存入集合 extracted_dates = {record[1] for record in result_set} # 现在就能正确判断了 print(cd_dt in extracted_dates)
方法2:用生成器表达式直接检查
如果不想额外创建集合,也可以用生成器表达式遍历每个元组,检查第二个元素是否匹配:
# 遍历每个记录,检查日期是否匹配 print(any(cd_dt == record[1] for record in result_set))
any()函数会在找到第一个匹配项时就停止遍历,对于小数据集来说很实用。
方法3:调整数据库查询(从源头简化)
如果你的业务场景不需要返回数字字段(比如示例里的0L、1L),可以直接修改数据库查询语句,只返回日期列。比如原来的查询是:
SELECT some_id, date_column FROM your_table;
改成:
SELECT date_column FROM your_table;
这样返回的result_set就会是(datetime.date(2018, 1, 29), datetime.date(2018, 1, 30), ...),直接用cd_dt in result_set就能得到正确结果了。
内容的提问来源于stack exchange,提问作者Wesley van Straalen
相关产品推荐
相关产品推荐

