Python中SQLite3按输入日期排序数据的代码正确性咨询
问题分析与修正
你的代码实现不合理,存在几个关键问题:
- SQL语法错误:
BETWEEN的用法错误,不需要额外括号,且VALUES子句在这里完全多余,正确的参数占位符应直接放在BETWEEN的两个值位置 - 未实现排序逻辑:你需求是按日期排序,但代码里没有添加
ORDER BY子句 - 聚合查询逻辑问题:
SUM(Wartość)是聚合函数,和Data一起查询时,若没有GROUP BY Data,会把所有符合条件的记录的Wartość求和后只返回一条结果,Data字段的值也会是随机某条记录的日期,不符合按日期分组求和再排序的预期
修正后的代码示例
如果你的需求是按日期范围筛选,然后按日期分组求和并排序,可以这样写:
if choice == 1: # 输入起始和结束日期 dt = input("请输入起始日期: ") dt2 = input("请输入结束日期: ") # 执行查询:按日期分组求和,然后按日期排序 cursor.execute(''' SELECT Data, SUM(Wartość) AS 总价值 FROM kalendarz WHERE Data BETWEEN ? AND ? GROUP BY Data ORDER BY Data ASC;''', (dt, dt2)) # 获取查询结果 results = cursor.fetchall() for row in results: print(f"日期: {row[0]}, 总价值: {row[1]}")
如果你的需求是按日期范围筛选后,直接按日期排序所有记录(不聚合求和),代码如下:
if choice == 1: dt = input("请输入起始日期: ") dt2 = input("请输入结束日期: ") cursor.execute(''' SELECT Data, Wartość FROM kalendarz WHERE Data BETWEEN ? AND ? ORDER BY Data ASC;''', (dt, dt2)) results = cursor.fetchall() for row in results: print(f"日期: {row[0]}, 价值: {row[1]}")
额外注意事项
- 确保数据库中
Data字段的类型是日期类型(如DATE),如果是字符串类型,要保证输入的日期格式和存储格式一致(比如YYYY-MM-DD),否则筛选和排序会出错 - 使用参数化查询(
?占位符)是正确的做法,能避免SQL注入风险,这部分你选对了
内容的提问来源于stack exchange,提问作者SiemowitJarilo
相关产品推荐
相关产品推荐

