关于python:无法比较offset naive和offset aware datetime-last-seen选项

can't compare offset-naive and offset-aware datetimes - last_seen option

本问题已经有最佳答案,请猛点这里访问。

我想更新用户上次看到的列。为此,我正在尝试此用户模型:

1
2
3
4
5
6
7
8
9
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()

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

1
2
3
@mod.before_app_request
def before_request():
    current_user.ping()

这是错误:

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

我怎么解决这个问题?我正在使用Postgres,这个问题很容易用我显示的代码模拟。


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

1
2
3
import pytz

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

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

为此,您需要pytz包(此包包含最新的时区信息,而该信息不属于Python标准库)。