【问题标题】:SQlite between query is not working correctly查询之间的 SQlite 无法正常工作
【发布时间】:2021-04-19 08:34:00
【问题描述】:

创建一个桌面应用程序来计算学生的成绩,这样每个学生的成绩都有一个日期列,这样我就可以使用 Tkinter 的日历计算两个日期之间的总和。

query = "SELECT SUM (scores) 
         FROM sscores 
         WHERE acttype = ? 
         AND sid = ? 
         AND ssub = ? 
         AND sdate BETWEEN '"+ ft1.get() +"' AND '"+ft2.get()+"'"
        
c.execute(query, (sact1, stuid, f1.get()))

由于某种原因,当我在一月份的任何月份之前查询时,即使我输入的唯一分数是在一月份的日期,它也没有给出查询结果。 当我选择一月份之前的日期和一月份之后的日期时,不会有查询结果但是如果我选择一月份的日期和一月份之后的日期,它会给我正确的查询结果。奇怪的是,即使我选择一月份的日期,它会给我正确的查询结果,但是当我选择一月份之前的任何一个月时,它什么也没给我。根据我的理解,选择一月之前的一个月和选择一个月仍然意味着分数的日期介于两者之间,但不会导致正确的日期。

【问题讨论】:

  • 看起来您的 BETWEEN 充当字符串类型,而不是日期类型比较。 PS。删除了不相关的标签。
  • 是的,日期是 str 而不是 date。必须弄清楚如何将其转换为日期类型

标签: python sql sqlite tkinter


【解决方案1】:

只是一个建议,您可以对所有值使用参数并避免字符串连接来构建sql代码

query = "SELECT SUM (scores) 
             FROM sscores 
             WHERE acttype = ? 
             AND sid = ? 
             AND ssub = ? 
             AND sdate BETWEEN ? AND ? "
    
c.execute(query, (sact1, stuid, f1.get(), ft1.get() , ft2.get()))

无论如何,请确保执行调用中的值和数据类型的正确匹配序列以及每个 var 的有效内容。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-05-16
    • 1970-01-01
    • 1970-01-01
    • 2013-08-05
    • 2013-06-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多