Voglio aggiornare l'ultima colonna visualizzata dall'utente. Per fare ciò sto provando questo modello utente:
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 viene eseguito sempre quando l'utente esegue un'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? Sto usando Postgres e il problema è facilmente simulato con il codice che sto mostrando.
risposte:
10 per risposta № 1Crea un datetime consapevole (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 consapevole con l'ora corrente in UTC.
Avrai bisogno del pytz
pacchetto per questo (questo pacchetto contiene le ultime informazioni sul fuso orario e tali informazioni non fanno parte della libreria standard di Python).