使用带有mysql unix时间戳的sqlalchemy定义一个表
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了使用带有mysql unix时间戳的sqlalchemy定义一个表,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1461字,纯文字阅读大概需要3分钟。
内容图文
![使用带有mysql unix时间戳的sqlalchemy定义一个表](/upload/InfoBanner/zyjiaocheng/898/bbb44f9083fa482eadd8973ee94f7f0a.jpg)
背景,有几种方法可以在MySQ中存储日期.
>作为字符串,例如“09/09/2009”.
>使用函数UNIX_TIMESTAMP()作为整数,这应该是传统的unix时间表示(你知道自纪元加上/减去闰秒后的秒数).
>作为MySQL TIMESTAMP,mysql特定数据类型与unix时间戳不同.
>作为MySQL Date字段,另一种特定于mysql的数据类型.
不要将案例2与案例3(或案例4)混淆是非常重要的.
我有一个带有整数日期字段的现有表(案例2)如何在sqlalchemy中以一种我不必访问mysql的“FROM_UNIXTIME”函数的方式定义它?
对于记录,只使用sqlalchemy.types.DateTime并希望它在检测到整数列时做正确的事情不起作用,它适用于时间戳字段和日期字段.
解决方法:
我认为您展示的类型装饰器存在一些问题.
> impl应该是sqlalchemy.types.Integer而不是DateTime.
>装饰器应该允许可以为空的列.
这就是我的想法:
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))
内容总结
以上是互联网集市为您收集整理的使用带有mysql unix时间戳的sqlalchemy定义一个表全部内容,希望文章能够帮你解决使用带有mysql unix时间戳的sqlalchemy定义一个表所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。