Django中auto_now和auto_now_add

创建一张表:

class DateTest(models.Model):
    import datetime
    name = models.CharField(max_length=32,default='1')
    t1 = models.DateField()
    t2 = models.DateField(auto_now=True)   # 自动更新时间
    t3 = models.DateField(auto_now_add=True)  # 添加数据是自动保存当前时间到数据库 创建时间时
    t4 = models.DateTimeField(auto_now=True)   # 差八小时       USE_TZ = False  用update更新数据时时间不会变 使用save会自动更新时间
    t5 = models.DateTimeField(auto_now_add=True)  # 差八小时    USE_TZ = False
    # mysql查询的时间是UTC时间   datetime.datetime.now()是本地时间

添加数据看上述几个字段的时间变化:

from task import models

def test(request):
    
    # 创建数据
    models.DateTest.objects.create(
        name='张三',
        t1 = '2019-2-14'
    )
    return HttpResponse('ok')

数据库中时间字段:
在这里插入图片描述
上述可以看到:

 t1 = models.DateField()2019-02-14  # 自己插入的时间
 t2 = models.DateField(auto_now=True)   # 自动更新时间
 t3 = models.DateField(auto_now_add=True)  # 添加数据是自动保存当前时间到数据库 创建时间时
 t4 = models.DateTimeField(auto_now=True)   # 上面可以看到时间差八小时
 t5 = models.DateTimeField(auto_now_add=True)  # 差八小时

为什么会差八小时,因为django默认使用的是UTC时间:

USE_TZ = False  # 让mysql不已UTC时间来存储时间数据
# django往mysql里面出数据的时候,如果这里的值为True,那么将让mysql强制使用UTC时间,
# 那么我们存储进入的时间,当你查询的时候,你就会发现,时间晚了8小时,
# 也就是说你存时间的时候被改为了UTC时间,本地是东八区,比UTC时间多8小时

更新数据:

# 更新数据
    models.DateTest.objects.filter(
        name='张三',
    ).update(name='李四')

数据库中可以看到名字改了但是时间刚刚已经设置为本地时间了,为什么时间还是UTC时间呢,因为auto_now用update更新数据时时间不会变:
在这里插入图片描述
只能自己指定时间:

# 更新数据
    models.DateTest.objects.filter(
        name='李四',
    ).update(name='王五',t4=datetime.datetime.now())

数据库中可以看到是本地时间:
重点:
从mysql中查出来的时间是UTC时间 而datetime.datetime.now()是本地时间,看上去存的是一样的,但是拿出来做计算是有问题的,因为一个是local.time另一个是utc.time,时间类型不一样。
在这里插入图片描述
使用model对象更新时间:

# 使用model对象更新数据
    ret = models.DateTest.objects.filter(name='王五').first()
    ret.name = '赵6'
    ret.save()

数据库中,可以看到时间更新了,auto_now对save才会生效,会自动更新,auto_now_add不会自动更新,只是创建这条数据时添加的当前数据的创建时间:
在这里插入图片描述

总结:

auto_now:
1.差八小时 需要将settings.py中的USE_TZ = True改成USE_TZ = False
2.用update更新数据时时间不会变 使用save会自动更新时间
auto_now_add:
1.添加当前这条数据的创建时间

猜你喜欢

转载自blog.csdn.net/qq_39253370/article/details/106438335
now
今日推荐