Bri*_*ell 25 python datetime sqlalchemy
我正在使用SQLAlchemy,我还不确定我将使用哪个数据库,因此我希望尽可能保持与数据库无关.如何在不将自己绑定到特定数据库的情况下将时区感知日期时间对象存储在数据库中?现在,我确定时间是UTC,然后我将它们存储在数据库中,并在显示时转换为本地化,但感觉不够优雅和脆弱.是否有一种与数据库无关的方法来从SQLAlchemy中获取时区感知日期时间而不是从数据库中获取天真的数据时间对象?
Den*_*ach 43
列时间有一个timezone参数DateTime,因此存储时区感知datetime对象没有问题.但是我发现datetime使用简单类型装饰器自动将存储转换为UTC 很方便:
from sqlalchemy import types
from dateutil.tz import tzutc
from datetime import datetime
class UTCDateTime(types.TypeDecorator):
impl = types.DateTime
def process_bind_param(self, value, engine):
if value is not None:
return value.astimezone(tzutc())
def process_result_value(self, value, engine):
if value is not None:
return datetime(value.year, value.month, value.day,
value.hour, value.minute, value.second,
value.microsecond, tzinfo=tzutc())
Run Code Online (Sandbox Code Playgroud)
请注意,当您datetime意外使用naive时,这表现得很好(意味着它会引发ValueError).
| 归档时间: |
|
| 查看次数: |
8419 次 |
| 最近记录: |