/ / не може да се сравняват офсет-наивни и offset-aware datetimes - last_seen опция [дубликат] - python, sql, postgresql, datetime, flask

не може да се сравнят офсетно-наивни и офсетови данни-дата - last_seen опция [дубликат] - python, sql, postgresql, datetime, колба

Искам да актуализирам последната колона на потребителя. За да направя това, опитвам този потребителски модел:

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 и проблемът е лесно симулиран с кода, който показвам.

Отговори:

10 за отговор № 1

Създайте дата и час (дата-час, която има часова зона):

import pytz

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

В този случай ще искате да създадете дата на съзнание с текущото време в UTC.

Ще ви трябва pytz пакет за това (този пакет съдържа най-новата информация за часовата зона и тази информация не е част от стандартната библиотека на Python).