/ / nie można porównywać czasów danych naiwnych i uwzględniających przesunięcia - opcja last_seen [duplikat] - python, sql, postgresql, datetime, flask

nie można porównać offset-naive i offset-aware datetimes - opcja last_seen [duplicate] - python, sql, postgresql, datetime, kolba

Chcę zaktualizować kolumnę ostatnio widzianą przez użytkownika. Aby to zrobić, próbuję tego modelu użytkownika:

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()

I ten kod jest uruchamiany zawsze, gdy użytkownik wykonuje jakąś akcję.

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

To jest błąd:

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

Jak mogę to rozwiązać? Korzystam z postgres, a problem można łatwo zasymulować za pomocą kodu, który wyświetlam.

Odpowiedzi:

10 dla odpowiedzi № 1

Utwórz świadomą datę / godzinę (datę, która ma strefę czasową):

import pytz

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

W takim przypadku będziesz chciał utworzyć świadomą datę i godzinę z bieżącym czasem w UTC.

Będziesz potrzebował pytz pakiet dla tego (ten pakiet zawiera najnowsze informacje o strefie czasowej i informacje te nie są częścią standardowej biblioteki Pythona).