/ / não é possível comparar datetime com deslocamento e reconhecimento de deslocamento - opção last_seen [duplicate] - python, sql, postgresql, datetime, flask

Não é possível comparar os tempos de dados com detecção de offset e com reconhecimento de deslocamento - opção last_seen [duplicate] - python, sql, postgresql, datetime, flask

Quero atualizar a última coluna vista pelo usuário. Para fazer isso, estou tentando este modelo de usuário:

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 esse código que sempre é executado quando o usuário executa alguma ação.

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

Este é o erro:

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

Como posso resolver isso? Estou usando o postgres e o problema é facilmente simulado com o código que estou mostrando.

Respostas:

10 para resposta № 1

Crie um datetime com reconhecimento (um datetime com fuso horário):

import pytz

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

Nesse caso, você desejará criar uma data e hora com a hora atual no UTC.

Você precisará do pytz pacote para este (este pacote contém as informações mais recentes sobre fuso horário e essas informações não fazem parte da biblioteca padrão do Python).