Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/55.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何在SqlAlchemy/Mysql中存储时区感知的日期时间值?_Python_Mysql_Datetime_Sqlalchemy_Pytz - Fatal编程技术网

Python 如何在SqlAlchemy/Mysql中存储时区感知的日期时间值?

Python 如何在SqlAlchemy/Mysql中存储时区感知的日期时间值?,python,mysql,datetime,sqlalchemy,pytz,Python,Mysql,Datetime,Sqlalchemy,Pytz,我想在mysql数据库中存储一个Python时区感知的datetime属性。我使用炼金术。在SqlAlchemy类定义中,我按以下方式指定列: a_utcDatetime = Column(DATETIME(fsp=6)) 我意识到在数据库中,该列不再有时区信息。 此外,从数据库读取后,变量也丢失了其时区信息 有没有办法在定义时间将一个时间段配置为时区感知 如果您确实希望存储时区偏移量,而不仅仅是遵循将所有日期/时间值存储为UTC的惯例,则需要为该偏移量值单独设置一列。我刚刚用MySQ

我想在mysql数据库中存储一个Python时区感知的datetime属性。我使用炼金术。在SqlAlchemy类定义中,我按以下方式指定列:

    a_utcDatetime = Column(DATETIME(fsp=6))
我意识到在数据库中,该列不再有时区信息。 此外,从数据库读取后,变量也丢失了其时区信息


有没有办法在定义时间将一个时间段配置为时区感知

如果您确实希望存储时区偏移量,而不仅仅是遵循将所有日期/时间值存储为UTC的惯例,则需要为该偏移量值单独设置一列。我刚刚用MySQL尝试了一下,它似乎很管用:

从datetime导入datetime、时区、timedelta 从sqlalchemy导入 创建引擎, 柱 整数 一串 文本 __版本为sa_版本, 日期时间, 从sqlalchemy.ext.declarative导入声明性基础 从sqlalchemy.orm导入sessionmaker 连接uri=mysql+pymysql://root:toot@本地主机:3307/mydb engine=create\u engineconnection\u uri,echo=False Base=声明性的\u Base 使用发动机。以连接方式开始: conn.executetextDROP表(如果存在)事件日志 类事件日志库: __表名\事件\日志 id=ColumnInteger,主键=True 事件=ColumnString50 local_datetime=ColumnDATETIME tz_offset_minutes=列整数 @财产 def dt_awareself: 返回self.local\u datetime.replace tzinfo=时区时间间隔=self.tz\u偏移量\u分钟 @dt_.setter def dt_awareself,值: self.local_datetime=value.replacetzinfo=None self.tz\u offset\u分钟= value.tzinfo.utcoffsetvalue.total_seconds//60 定义报告自我: 回来 F Base.metadata.create_allengine 会话=会话MakerBind=引擎 会话=会话 my_event_start=日期时间 2020,4,20,16,20,0,tzinfo=TimeZoneTimeMedeltahours=-7 my_event=EventLogid=1,event=a event,dt_aware=my_event\u start session.addmy_事件 session.commit 通过直接查询数据库检查结果 sql=text按id从事件日志顺序选择* 使用发动机。以连接方式开始: 结果=conn.executesql.fetchall 打印结果 控制台输出: [1,‘事件’,datetime.datetime2020,4,20,16,20,-420] printmy_事件 控制台输出: 打印类型My_event.dt_aware
我能在Stackoverflow上找到多少帅哥。精彩的所以这个解决方案看起来很不错。非常感谢。也许我更容易按照您的建议将值保存为数据库中的纯UTC。