如何使用 MySQL now() 函数自动填充 Django 模型中的时间信息?

使用 MySQL NOW() 填充 Django 模型时间字段:
方法 1 (推荐): 蟒蛇 从 django.db 导入模型 从 django.utils
类 post(model.model) 导入时区: create_at = models.DateTimeField(default=timezone.now)
时间:timezone.now 于 2 008 年引入。
优点:跨数据库兼容性。
缺点:时间与应用服务器同步。

方法2 (具体要求): 蟒蛇 从 django.db 导入模型 从 django.db.models 导入 F
class Post(models.Model): create_at = models.DateTimeField(default=F('now'))
time:F 表达式于 2 01 7 年引入。
注意:迁移文件中需要指定MySQL NOW()。

迁移文件示例: 蟒蛇 类迁移(Migration.Migration): 依赖项 = [('app', '0001 _initial')]
操作 = [ 迁移.addfield( model_name='帖子', 名称='创建时间', field=models.DateTimeField(default=models.RawSQL('NOW()', [])) ) ]
主要缺点:
方法2 仅适用于MySQL,其他数据库需要使用CURRENT_TIMESTAMP代替。

2 02 1 年,Django 3 .2 将支持 models.functions.Now() 而不是 rawSQL。

实用提醒:
除非有跨数据库的需求,否则直接使用timezone.now。

MySQL如何创建每天0点自动运行的触发器?

嘿,我们来谈谈 MySQL 事件调度程序。
这个功能其实非常实用。
我以前用过它定期更新数据库中的数据,非常方便。

首先,你需要确保你的MySQL版本是5 .1 及以上,因为之前的版本不支持该功能。
之前在做一个小项目,由于版本很低,所以不得不升级MySQL才能使用这个功能。

接下来,创建一个 EVENT 事件。
我记得我写过这样的SQL语句:
sql 创建事件 my_daily_event 每天都按计划进行 开始时间 '2 02 3 -1 0-1 0 00:00:00' 我愿意 开始 更新我的表 SET some_column=some_value 其中一些_条件; 结束;
这里需要注意的是,STARTS后面是一个具体的日期和时间,它决定了事件第一次执行的时机。
我选择的示例是 2 02 3 年 1 0 月 1 0 日 0 点。

然后您可以使用 HeidiSQL 等图形工具来创建事件,这要容易得多。
当我使用 HeidiSQL 时,我直接在 GUI 上设置名称、时间表和 SQL 语句,单击“创建”按钮即可完成。

创建后,不要忘记验证事件是否已成功创建。
您可以查询 information_schema.EVENTS 表以查看其中是否存在您的事件。
我记得查询语句如下:
sql 从 information_schema.EVENTS 中选择,其中 EVENT_NAME = 'my_daily_event';
最后,记得检查 MySQL Server 的 Event_Scheduler 是否正在运行。
如果没有启用,可以使用以下命令启用:
sql 设置全局 events_scheduler = ON;
如果MySQL服务器重新启动,生成的事件将继续按照计划运行,除非您手动禁用或删除它。

其实我不是这方面的专家,但这是我的个人经历。
可能有点极端,但我觉得使用MySQL的事件调度器可以大大简化日常数据库维护。

Sequelize自动生成的创建时间不准?如何解决?

顺序时间校正方案有效。

将时区配置为“+08 :00”,即北京时间东八区。

dialectOptions.useUTC 设置为 false 以禁用自动转换为 UTC。

直接使用代码: JavaScript const Sequelize = new Sequelize('db', '用户', 'pass', { 主机:'本地主机', 引用: 'mysql', 时区: '+08 :00', bidOptions: { useUTC: false } });
创建数据后,查看createdAt字段。
如果是当地时间,则这是正确的。

注意:如果数据库服务器的时区不是+08 :00,则需要进行额外的时间转换处理。
团队必须整合时区标准。

自己掂量一下。

SQL数据库中自动更新updateTime

我最近正在帮助一家初创公司将他们的后端数据库从 MySQL 迁移到 PostgreSQL。
这个过程确实让我很忙碌,但也教会了我很多东西。
例如,MySQL中有一个名为ONUPDATECURRENT_TIMESTAMP的函数,可以在更新记录时自动将update_time字段设置为当前时间。
这在 MySQL 5 .6 .5 及更高版本中可用。

那天,我在办公室敲代码,心想:这个功能真是太好了。
我不用自己写触发器,这样就简化了很多代码。
然后我想起来以前使用PostgreSQL的时候,我必须手动写一个触发器才能达到这个效果。
我记得在成都的一个项目中,表中的update_time字段是使用触发器实现的。
我还记得激活函数的名字是update_update_time。
那时我对PostgreSQL了解不多,花了很长时间才学会。

请问激活函数怎么写?哦,顺便说一下,它是这样的:
sql 创建或替换 update_update_time() 函数 返回激活 $$ 开始 NEW.update_time = current_timestamp; 新回归; 结尾; $$ 语言 plpgsql;
写完这个触发器函数后,必须创建一个BEFOREUPDATE触发器来调用这个函数:
sql 创建触发器 upd_update_time_trigger 更新 your_table 之前 对于每个性能函数 upd_update_time();
当时我很担心广州办公室的显示器。
那个时期加班确实很常见。
现在回想起来,那些辛苦的夜晚并没有白费。
至少我学会了如何在不同的数据库系统中实现相同的功能。

从性能上来说,MySQL的ONUPDACURRENT_TIMESTAMP显然效率更高,因为它是由数据库内部直接处理的,而PostgreSQL的trigger方式会有稍高的性能成本。
但是,如果您需要其他功能(例如记录修订信息),触发器可能会很有用。

我还在想,如果有一天我能结合这两种方法的优点该多好。
然而,这可以开始新的学习旅程。