2015-07-26 11 views
7

Chcę zaktualizować ostatnio wyświetlaną kolumnę użytkownika. Aby to zrobić próbuję tego modelu użytkownika:nie można porównać opóźnionych z offsetem i offsetowymi datetimes - opcja last_seen

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, który uruchamiać zawsze, gdy użytkownik wykona jakąś akcję.

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

Jest to błąd:

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

Jak mogę rozwiązać ten problem? Używam postgreSów, a problem można łatwo symulować za pomocą kodu, który wyświetlam.

Odpowiedz

10

Załóż świadomy datetime (datetime, który ma strefę czasową):

import pytz 

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

W tym przypadku będziemy chcieli stworzyć świadomy datetime z bieżącego czasu UTC.

Potrzebujesz do tego pakietu pytz (ten pakiet zawiera najnowsze informacje o strefie czasowej i ta informacja nie jest częścią standardowej biblioteki Python).