/ / impossibile confrontare i periodi di tempo offset-naive e offset-aware - opzione last_seen [duplicato] - python, sql, postgresql, datetime, pallone

impossibile confrontare i datet offset-naive e offset-aware - opzione last_seen [duplicate] - python, sql, postgresql, datetime, flask

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 № 1

Crea 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).