首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SQLAlchemy DateTime时区

SQLAlchemy DateTime时区
EN

Stack Overflow用户
提问于 2009-01-05 23:46:02
回答 4查看 90.3K关注 0票数 61

SQLAlchemy的DateTime类型允许一个timezone=True参数将一个非天真的datetime对象保存到数据库中,并以此方式返回它。是否有任何方法可以修改tzinfo的时区,例如,SQLAlchemy传入的时区,例如UTC?我意识到我可以只使用default=datetime.datetime.utcnow;然而,这是一个天真的时间,它会很高兴地接受某个人传递一个天真的基于本地时间的日期时间,即使我与它一起使用timezone=True,因为它使本地或UTC的时间变得不天真,而没有一个基本的时区来规范它。我尝试过(使用比兹)使datetime对象不天真,但是当我将它保存到DB时,它会返回到朴素的状态。

请注意,datetime.datetime.utcnow如何不能很好地处理timezone=True

代码语言:javascript
复制
import sqlalchemy as sa
from sqlalchemy.sql import select
import datetime

metadata = sa.MetaData('postgres://user:pass@machine/db')

data_table = sa.Table('data', metadata,
    sa.Column('id',   sa.types.Integer, primary_key=True),
    sa.Column('date', sa.types.DateTime(timezone=True), default=datetime.datetime.utcnow)
)

metadata.create_all()

engine = metadata.bind
conn = engine.connect()
result = conn.execute(data_table.insert().values(id=1))

s = select([data_table])
result = conn.execute(s)
row = result.fetchone()

(1,datetime.datetime(2009年,1,6,0,9,36,891887))

代码语言:javascript
复制
row[1].utcoffset()

datetime.timedelta(-1,64800) #这是我的本地时间偏移量!!

代码语言:javascript
复制
datetime.datetime.now(tz=pytz.timezone("US/Central"))

datetime.timedelta(-1,64800)

代码语言:javascript
复制
datetime.datetime.now(tz=pytz.timezone("UTC"))

datetime.timedelta(0) #UTC

即使我将其更改为显式使用UTC:

..。

代码语言:javascript
复制
data_table = sa.Table('data', metadata,
    sa.Column('id',   sa.types.Integer, primary_key=True),
    sa.Column('date', sa.types.DateTime(timezone=True), default=datetime.datetime.now(tz=pytz.timezone('UTC')))
)

row[1].utcoffset()

..。

datetime.timedelta(-1,64800) #它没有使用我显式添加的时区

或者如果我放弃了timezone=True

..。

代码语言:javascript
复制
data_table = sa.Table('data', metadata,
    sa.Column('id',   sa.types.Integer, primary_key=True),
    sa.Column('date', sa.types.DateTime(), default=datetime.datetime.now(tz=pytz.timezone('UTC')))
)

row[1].utcoffset() is None

..。

True #这次它甚至没有将时区保存到db

EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/414952

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档