代码之家  ›  专栏  ›  技术社区  ›  Fallenreaper

当表datetime现在通过时触发脚本()

  •  0
  • Fallenreaper  · 技术社区  · 6 年前

    我从数据库中删除,并试图回到它的一些我记得很久以前创建了一个类似EBAY的应用程序,你可以在其中创建一个带有结束日期的拍卖,当日期过去时,它将关闭如果我记得有两处房产。

    我正试图创造一些类似的东西。用户将定义一个日期时间,当该日期发生时,它将启动一个python脚本。我不认为它一定会触发脚本,但一个不错的替代方法是:如果datetime<=now(),则插入出站请求;

    我想记住这个关键字。

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

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

    我不认为这是一个触发器,因为这似乎意味着某种类型的条目被插入到数据库中。我在想一种被动函数,用来检查表约束。

    我所有的代码都是用python编写的,但是对免费的dbms是开放的,但是倾向于使用mysql或sqlalchemy

    我知道为了简单的概念证明,我会有一张类似于:

    USER_ID varchar(60)
    URL varchar(250)
    COMMENT varchar(1000)
    SUBMISSION_DATE datetime
    PROCESS_DATE datetime
    
    1 回复  |  直到 6 年前
        1
  •  1
  •   Fallenreaper    6 年前

    经过一些讨论后,有人指出,为了使之快速,应在处理日期上使用索引。这样表可以快速迭代。其次,我发现创建一个视图来获取利用索引进行处理所需的信息是明智的。

    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 ;