2014-04-26 9 views
10

Mam model z kolumny data określona jako:SQLAlchemy Jak załadować dat z czasowej = UTC (daty zapisane bez strefy czasowej)

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

Daty comme się z tz_info = None, która jest poprawna, ponieważ daty są przechowywane bez informacji o strefie czasowej.

Gdybym wydrukować datę:

print(my_object.created_on.isoformat()) 

uzyskać ten format

2014-04-26T17:46:27.353936 

chciałbym mieć wskaźnik UTC strefy czasowej, takie jak:

2014-04-26T17:46:27.353936Z 

Czy istnieje sposób zdefiniowania tego zachowania w konfiguracji schematu?

SQLAlchemy ma, strefa czasowa = Boolean

sqlalchemy.types.DateTime (strefa czasowa = False)

ponieważ chcę być przechowywanie bez strefy czasowej.

Odpowiedz

11

chcesz niestandardowy typ danych, opisane tutaj: http://docs.sqlalchemy.org/en/rel_0_9/core/types.html#custom-types

Konkretnie, coś takiego:

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) 

Następnie wystarczy zrobić kolumnę tak:

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

polecam używać .

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

dzięki, biblioteka strzałek wydaje się bardzo trafna, obejrzy ją –

Powiązane problemy