表datetime经过now()

时间:2018-07-19 03:08:08

标签: mysql database sqlalchemy relational-database

我已从数据库中删除,并正设法重新进入数据库。我记得很久以前创建了一个类似EBAY的应用,您可以在其中创建一个带有结束日期的拍卖,当日期过去时,它将被关闭。如果我记得有2个属性。

我正在尝试创建一些类似的东西。用户将定义一个日期时间,当该日期发生时,它将触发一个python脚本。我认为它不一定会触发脚本,但是一个不错的选择是:如果datetime <= now(),插入outbound_requests;

我想记住关键字。

理想情况下,我想让数据库处理所有的工作,然后now()超过表的datetime列,它将在删除自身之前执行python脚本。

作为替代方案,我可以将条目移动到另一个表进行处理。

我不认为这是一个触发器,因为这似乎意味着将某种条目插入到数据库中。我在想的只是某种被动功能,可以检查表约束。

我所有的代码都在python中,但是可以免费使用DBMS,但是倾向于MySQL或SQLAlchemy

我知道,对于我的简单概念证明,我将有一个类似于以下内容的表格:

USER_ID varchar(60)
URL varchar(250)
COMMENT varchar(1000)
SUBMISSION_DATE datetime
PROCESS_DATE datetime

1 个答案:

答案 0 :(得分:0)

在进行了一些讨论之后,我们注意到为了快速执行,请在处理日期使用索引。这样,表可以快速迭代。其次,我发现创建视图以获取需要利用索引处理的信息很聪明。

create table if not exists T(
  USER_ID nvarchar(60),
  URL nvarchar(250),
  CONTENT nvarchar(700),
  SUBMISSION_DATE datetime,
  PROCESS_DATE datetime,
  index PROCESS_DATE_IDX using BTREE (PROCESS_DATE)
);

create or replace view T_Vw as SELECT * FROM T where PROCESS_DATE < now();

根据已查看的列的使用,将旧条目转储到存储表中可能很聪明。

create table if not exists T_BK(
  USER_ID nvarchar(60),
  URL nvarchar(250),
  CONTENT nvarchar(700),
  SUBMISSION_DATE datetime,
  PROCESS_DATE datetime,
  index PROCESS_DATE_IDX using BTREE (PROCESS_DATE)
);

DELIMITER $$
CREATE TRIGGER T_tgr BEFORE DELETE ON Tweet FOR EACH ROW
BEGIN
   insert into T_BK ('USER_ID', 'URL', 'CONTENT', 'SUBMISSION_DATE', 'PROCESS_DATE') values (OLD.USER_ID, OLD.URL, OLD.CONTENT, OLD.SUBMISSION_DATE, OLD.PROCESS_DATE);
END; $$
DELIMITER ;