2014-04-26 15 views
10

Ho un modello con una colonna di data definito come:SQLAlchemy Come caricare le date con fuso orario = UTC (date memorizzati senza fuso orario)

created_on = db.Column(db.DateTime, default=db.func.now(), nullable=False) 

Le date comme con tz_info = Nessuno, che è corretto, dal momento che le date vengono memorizzate senza informazioni sul fuso orario.

Se stampare la data:

print(my_object.created_on.isoformat()) 

ottengo questo formato

2014-04-26T17:46:27.353936 

Vorrei avere un indicatore UTC fuso orario, come ad esempio:

2014-04-26T17:46:27.353936Z 

C'è un modo per definire questo comportamento nella configurazione dello schema?

SQLAlchemy ha, fuso orario = booleano

sqlalchemy.types.DateTime (fuso orario = False)

perché voglio la memoria da essere senza fuso orario.

risposta

11

Si desidera un tipo di dati personalizzato, descritto qui: http://docs.sqlalchemy.org/en/rel_0_9/core/types.html#custom-types

In particolare, qualcosa di simile:

import pytz # from PyPI 

class AwareDateTime(db.TypeDecorator): 
    '''Results returned as aware datetimes, not naive ones. 
    ''' 

    impl = db.DateTime 

    def process_result_value(self, value, dialect): 
     return value.replace(tzinfo=pytz.utc) 

Poi basta fare la colonna in questo modo:

created_on = db.Column(AwareDateTime, default=db.func.now(), nullable=False) 
6

lo consiglio utilizzare .

from datetime import datetime 
from sqlalchemy_utils import ArrowType 
import arrow 


class Article(Base): 
    __tablename__ = 'article' 
    id = sa.Column(sa.Integer, primary_key=True) 
    name = sa.Column(sa.Unicode(255)) 
    created_at = sa.Column(ArrowType) 



article = Article(created_at=arrow.utcnow()) 
+0

grazie, la libreria di frecce sembra molto pertinente, la guarderà –