python - 无法比较原始偏移和偏移感知日期时间 - last_seen 选项

标签 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,这个问题很容易用我展示的代码模拟。

最佳答案

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

import pytz

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

在这种情况下,您需要使用 UTC 中的当前时间创建一个感知日期时间。

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

关于python - 无法比较原始偏移和偏移感知日期时间 - last_seen 选项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31643080/

相关文章:

sql - 获取两个日期列之间的月、日差

php - 使用数组创建 SQL 表

ruby-on-rails - 根据投票数对列表进行排序

python - 计算属于 Pandas 时期的行

python - 将第一个单词和参数与可选参数(带引号或不带引号)匹配

python - 使用 Ctypes 从 Python 传递 C 结构指针

python - pandas:具有不同索引的条件

mysql - 汇总不同组的每个 ID 的结果

ruby-on-rails - 在模型创建时生成自定义 ID

sql - 我可以在 jOOQ SQL 执行器中使用命名参数吗?