【问题标题】:How to use timedelta in (Flask-)SQLAlchemy?如何在(Flask-)SQLAlchemy 中使用 timedelta?
【发布时间】:2021-10-17 20:24:52
【问题描述】:

我想在我的 models.py 中创建一个名为“date_expiration”的列,它采用当前时间并增加四天。以下代码导致unsupported operand type(s) for +: 'builtin_function_or_method' and 'datetime.timedelta',因为我没有用括号()显式调用utcnow。

这是我的班级出现上述错误:

class Submission(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    uri = db.Column(db.String(100), nullable=False)
    uri_name = db.Column(db.String(60), nullable=False)
    reviewer = db.Column(db.String(50), nullable=False)
    url = db.Column(db.String(200), nullable=False)
    date_submission = db.Column(db.DateTime, nullable=False, 
        default=datetime.datetime.utcnow)
    date_expiration = db.Column(db.DateTime, nullable=False, default= 
        (datetime.datetime.utcnow + datetime.timedelta(days=4)))
    submission_description = db.Column(db.Text, nullable=False)

设置 date_expiration 列的正确方法是什么?

【问题讨论】:

  • 看看这个 SO 答案中列出的选项:stackoverflow.com/a/33532154/42346
  • 你用的是什么数据库?
  • 警告 - 您的代码中有错字:defualt
  • 我现在正在使用 SQLite,计划稍后在接近部署时将其换掉
  • 该 SO 答案中的选项确实有所帮助,但由于添加到当前时间,我没有看到太多关于设置未来日期/时间的信息。使用“datetime.datetime.utcnow() + datetime.timedelta(days=4)” 会起作用(注意括号),但这会破坏设置时间的目的,该时间总是在设置 date_submission 值后四天

标签: python flask sqlalchemy flask-sqlalchemy


【解决方案1】:

为您的date_exipiration 列尝试此代码,这将起作用:

date_expiration = db.Column(db.DateTime, nullable=False, default= (datetime.datetime.today() + datetime.timedelta(days=4)))

使用datetime.datetime.today() 而不是datetime.datetime.utcnow。 因为,两者都是不同的类型,所以你会出错。

【讨论】:

  • 我今天试试这个,让你知道,谢谢你的建议
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-08-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多