You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.08 08:40:34