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 № 1Utwó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).