如何在 (Flask-)SQLAlchemy 中使用 timedelta?

How to use timedelta in (Flask-)SQLAlchemy?

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

这是我的 class 上面的错误:

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 列的正确方法是什么?

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

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

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