2015-07-26 8 views
7

Voglio aggiornare l'ultima colonna utente vista. Per fare questo sto provando questo modello utente:non può confrontare datetime offset-naive e offset-aware - opzione 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() 

E questo codice che esegue sempre quando l'utente esegue una certa azione.

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

Questo è l'errore:

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

Come posso risolvere questo problema? Sto usando postgres e il problema è facilmente simulato con il codice che sto mostrando.

risposta

10

Creare un datetime conoscenza (un datetime che ha un fuso orario):

import pytz 

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

In questo caso ti consigliamo di creare un datetime a conoscenza con l'ora corrente in UTC.

Per questo è necessario il pacchetto pytz (questo pacchetto contiene le informazioni sul fuso orario più recenti e tali informazioni non fanno parte della libreria standard di Python).