gpt4 book ai didi

python - 使用带有 mysql unix 时间戳的 sqlalchemy 定义表

转载 作者:可可西里 更新时间:2023-11-01 07:50:46 28 4
gpt4 key购买 nike

背景,在MySQ中有几种存储日期的方法。

  1. 作为字符串,例如“2009 年 9 月 9 日”。
  2. 作为使用函数 UNIX_TIMESTAMP() 的整数,这应该是传统的 unix 时间表示法(您知道自纪元以来的秒数加上/减去闰秒)。
  3. 作为 MySQL TIMESTAMP,一种与 unix 时间戳不同的 mysql 特定数据类型。
  4. 作为 MySQL 日期字段,另一种 mysql 特定数据类型。

    请务必不要将案例 2 与案例 3(或案例 4)混淆。我有一个带有整数日期字段的现有表(案例 2),我如何在 sqlalchemy 中以一种无需访问 mysql 的“FROM_UNIXTIME”函数的方式定义它?

    郑重声明,仅使用 sqlalchemy.types.DateTime 并希望它在检测到整数列不起作用时做正确的事情,它适用于时间戳字段和日期字段。

最佳答案

我认为您展示的类型装饰器存在一些问题。

  1. impl 应该是 sqlalchemy.types.Integer 而不是 DateTime
  2. 装饰器应该允许可以为空的列。

这是我的想法:


import datetime, time
from sqlalchemy.types import TypeDecorator, DateTime, Integer

class IntegerDateTime(TypeDecorator):
"""a type that decorates DateTime, converts to unix time on
the way in and to datetime.datetime objects on the way out."""
impl = Integer # In schema, you want these datetimes to
# be stored as integers.
def process_bind_param(self, value, _):
"""Assumes a datetime.datetime"""
if value is None:
return None # support nullability
elif isinstance(value, datetime.datetime):
return int(time.mktime(value.timetuple()))
raise ValueError("Can operate only on datetime values. "
"Offending value type: {0}".format(type(value).__name__))
def process_result_value(self, value, _):
if value is not None: # support nullability
return datetime.datetime.fromtimestamp(float(value))

关于python - 使用带有 mysql unix 时间戳的 sqlalchemy 定义表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/762750/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com