无法比较offset-naive和offset-aware datetimes - last_seen选项

时间:2015-07-26 23:39:14

标签: python sql postgresql datetime flask

我想更新用户上次看到的列。要做到这一点,我正在尝试这个用户模型:

class User(UserMixin, db.Model):
    id = db.Column(db.Integer, primary_key=True)
    ...
    last_seen = db.Column(db.DateTime(timezone=True), default=datetime.datetime.utcnow)

    def ping(self):
        self.last_seen = datetime.datetime.utcnow()
        db.session.add(self)
        db.session.commit()

此代码始终在用户执行某些操作时运行。

@mod.before_app_request
def before_request():
    current_user.ping()

这是错误:

TypeError: can't compare offset-naive and offset-aware datetimes

我该如何解决这个问题?我正在使用postgres,问题很容易用我正在展示的代码模拟。

1 个答案:

答案 0 :(得分:11)

创建一个知晓日期时间(具有时区的日期时间):

import pytz

self.last_seen = datetime.datetime.utcnow().replace(tzinfo=pytz.UTC)

在这种情况下,您将要创建一个以UTC为当前时间的知晓日期时间。

您需要pytz包(此软件包包含最新的时区信息,并且该信息不是Python标准库的一部分)。