我的模型的日期列定义为:
created_on = db.Column(db.DateTime, default=db.func.now(), nullable=False)
日期与tz_info = None相符,这是正确的,因为存储了日期 没有时区信息。
如果我打印日期:
print(my_object.created_on.isoformat())
我得到这种格式
2014-04-26T17:46:27.353936
我想要一个UTC时区指标,例如:
2014-04-26T17:46:27.353936Z
有没有办法在架构配置中定义此行为?
SQLAlchemy有,timezone = Boolean
sqlalchemy.types.DateTime(时区=假)
因为我希望存储没有时区。
答案 0 :(得分:13)
您需要一种自定义数据类型,如下所述:http://docs.sqlalchemy.org/en/rel_0_9/core/types.html#custom-types
具体来说,就像这样:
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)
然后就像这样制作专栏:
created_on = db.Column(AwareDateTime, default=db.func.now(), nullable=False)
答案 1 :(得分:8)
我建议使用Arrow type。
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())