【问题标题】:Flask - How can I delete data ranging back X days? [closed]Flask - 如何删除 X 天前的数据? [关闭]
【发布时间】:2020-09-01 19:00:42
【问题描述】:

我正在使用 Flask SQLAlchemy 和 Postgres,我想知道如何从表中删除数据,如果它返回,例如从当前日期起 7 天。

我的表有 3 行,姓名、爱好和发布日期,它们都是 STRING。

我使用的日期时间格式是

"%Y-%m-%d %H:%M:%S"

【问题讨论】:

  • 如果您不告诉我们您的datetime 格式是什么,则无法回答,因为您已将其存储为字符串。 ISO8601 我希望
  • 抱歉,已更新。你是对的,ISO8601。
  • DELETE FROM my_table WHERE DATEDIFF(day, my_table.date_posted, CURRENT_DATE) = 7?
  • @inspectorG4dget 但这是一个原始查询,没有利用 SQLA :(
  • 是的,我通常使用诸如User.query.all() 之类的查询来取回该表中的所有行。

标签: python postgresql flask flask-sqlalchemy


【解决方案1】:

只有在您以ISO 8601 格式存储日期时间时才有效。可能还有其他格式允许相同的字典顺序;我只是不知道他们,所以我很安全。

确实,如果您以DateTime 格式存储会更容易,但无论如何。

import datetime as dt

DAYS = 30

cutoff = (dt.date.today() - dt.timedelta(days=DAYS)).strftime('%Y-%m-%d')
User.query.filter_by(date_added<=cutoff).delete()
db.session.commit()

如果您确实开始将时间戳存储为DateTime,但想按日期过滤,您可以使用cast and Date

【讨论】:

  • 知道了,非常感谢。我将重新格式化我的表格,以便它采用 DateTime 而不是字符串!
  • 这会容易得多。如果有帮助,我可以添加一些额外的如何处理 DateTimeDate 类型,@RobinsonD​​ickinson
  • 当然,那会很有帮助。
  • @RobinsonD​​ickinson 你应该尽可能使用DateTime(timezone=True)。没有时区的时间戳主要用于支持较旧的数据库。如果您创建一个新数据库,您应该添加时区。它是时间相关数据的关键信息。即使您使用的是 UTC,否则您将永远不知道是否需要应用 DST。
  • @exhuma 完全有效。我很想将它添加到我的答案中,但我宁愿给你机会添加另一个答案。我(认为)我修正了问题本身的比较,但很高兴对此表示赞同
猜你喜欢
  • 2020-05-16
  • 1970-01-01
  • 2016-09-07
  • 2012-09-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-01-31
相关资源
最近更新 更多