首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >datetime.date.min和Mysql的日期最小值是不同的。

datetime.date.min和Mysql的日期最小值是不同的。
EN

Stack Overflow用户
提问于 2019-11-20 10:23:13
回答 1查看 1.6K关注 0票数 2

实际问题

如何处理Django DateField和Mysql DATE类型中不同的最小日期。如何处理这个问题?

TL:DR

对于datetime.date.min类型,DATE的值低于Mysql中支持的最小值。将datetime.date.min保存到Mysql是可能的,但它不能保证工作正常。

上下文

我正在使用Django (v1.11)模型:

代码语言:javascript
复制
class MyModel(model.Model):
    begin_date = models.DateField(null=True, blank=True)
    end_date = models.DateField(null=True, blank=True)

目前,具有NULL值的字段分别指定了较低的日期范围限制和较高的日期范围限制。示例:

从开始到今天的日期如下:

代码语言:javascript
复制
mymodel.begin_date = None
mymodel.end_date = datetime.date(2019, 11, 20)
mymodel.save()

None/NULL的使用需要在任何排序操作中将其转换为datetime.date.min/datetime.date.max。简单地说,它不方便,而且增加了不必要的复杂性。

我的想法是做必要的迁移,开始使用datetime.date.min/datetime.date.max而不是None/`NULL‘

但有一个问题:

Mysql有不同的min/max日期范围

根据mysql文档

日期类型用于日期部分的值,但不用于时间部分。MySQL检索并以‘YYYY DD’格式显示日期值.支持范围为“1000-01-01”到“9999-12-31”。

根据python文档:

在日期或日期时间对象中允许的最小年份数。MINYEAR是1。 日期或日期时间对象中允许的最大年份数。MAXYEAR为9999。 最早可代表的日期(MINYEAR,1,1)。 最新的可代表日期,日期(MAXYEAR,12,31)。

结果是,在Django中,仍然可以使用datetime.date.min,并将其保存到数据库中。,但它并不是起作用的大师。

因为:

对于日期和日期时间范围描述,“支持”意味着尽管早期的值可能有效,但无法保证。

我的想法

我正在考虑做所有必要的迁移,从None转换中清除代码,只使用Field.default。将其设置为default=datetime(1000, 1, 1) (最低mysql支持日期)

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-11-21 07:33:27

我想你的主意会很好的。

但是请注意,它是特定于数据库的。使用None的更笨拙的方法确实具有跨数据库工作的优点。

还请注意,显然是MySQL,让我们将日期存储在表中的最小值以下。因此,数据库中的日期可能不会被筛选器捕获。因此,在存储日期之前,一定要验证日期,以确保它们处于或超过最小值。

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

https://stackoverflow.com/questions/58952005

复制
相关文章

相似问题

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