【问题标题】:SQLite return records where date is more than a week oldSQLite 返回日期超过一周的记录
【发布时间】:2017-04-14 17:17:55
【问题描述】:

我正在为一个图书库制作一个程序,在 sqlite 数据库中有一个图书表,其中包括该图书最后一次被取出的日期。

我需要一个查询来显示过期图书。到目前为止,我的代码如下:

def findOverdueBooks(event):
    findRecords = c.execute("SELECT * FROM bookList WHERE takenOut < 'now' ,  '-1 week' " )
    for row in findRecords:
        print(row)

运行代码时出现此错误

line 31, in findOverdueBooks
findRecords = c.execute("SELECT * FROM bookList WHERE takenOut < 'now' ,  '-1 week' " )
sqlite3.OperationalError: near ",": syntax error

我不明白为什么逗号会导致错误,因为它在documentation 中是这样显示的。

【问题讨论】:

  • 缺少对日期函数的调用

标签: python sql database sqlite


【解决方案1】:

您的日期时间比较导致了这里的问题。应该是

AND takenOut < datetime('now', '-7 day')

更多信息请参见SQLite Date And Time Functions

那应该是&gt;比较

AND takenOut > datetime('now', '-7 day')

如果你只比较日期部分,你也可以试试下面的方法

WHERE DATE(takenOut) >= DATE('now', 'weekday 0', '-7 days')

【讨论】:

  • 谢谢,这已经消除了语法错误。但是,它没有返回任何结果。它应该像在我的数据库中一样,我的记录中的 takeOut 字段是“2016-11-15”。知道为什么吗?如果不是那么没问题,我可以提出一个新问题
  • 我将其更改为“-7 天”而不是“-1 周”,现在它可以工作了,这很奇怪这是如何导致问题的。感谢您的帮助
  • weekday 0 是做什么的?
猜你喜欢
  • 1970-01-01
  • 2016-10-31
  • 2016-09-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多