En mi modelo Flask tengo esta columna:
datetime = db.Column(db.DateTime, nullable=False, default=datetime.now)
Cuando completo las filas de una base de datos PostgreSql, obtengo esto:
2020-07-03 18:12:49.362271 2020-07-04 09:21:34.644202
Ahora, quiero formatear esos resultados usando la función to_char
de Postgresql. La consulta debería ser esta:
select to_char(datetime, 'YYYY-MM-DD HH24:MI:SS') as datetime from order_detail;
Y el resultado es este:
--------------------- 2020-07-03 18:12:49 2020-07-04 09:21:34 (2 rows)
¿Cómo puedo decirle a Flask-SqlAlchemy que ejecute esa función cuando consulta la tabla order_detail
?
Importante: no quiero hacer el formato en mi aplicación Flask, quiero dejar que Postgresql formatee los resultados .
Utilice column_property()
y func()
. Suponiendo que su modelo se llame Foo
:
from sqlalchemy import func from sqlalchemy.orm import column_property class Foo(db.Model): id = db.Column(db.Integer, primary_key=True) datetime = db.Column(db.DateTime, nullable=False, default=datetime.now) formatted_datetime = column_property(func.to_char(datetime, 'YYYY-MM-DD HH24:MI:SS')) # print(Foo.query.all()[0].formatted_datetime) # ->'2020-07-04 06:59:09'
Si es importante que el nombre del atributo del modelo sea datetime
, deberá asignar a la columna subyacente un nombre de atributo diferente y hacer referencia a la columna con su name
kwarg.
class Foo2(db.Model): __tablename__ = 'foo' id = db.Column(db.Integer, primary_key=True) orig_datetime = db.Column(db.DateTime, name='datetime', nullable=False, default=datetime.now) datetime = column_property(func.to_char(orig_datetime, 'YYYY-MM-DD HH24:MI:SS')) # print(Foo2.query.all()[0].datetime) # ->'2020-07-04 06:59:09'