1小时后如何从数据库中删除数据?

时间:2019-02-04 11:50:28

标签: django

大家好,我已经使用django在数据库中保存了一个用户ip地址,但是我想在一小时后删除该ip地址。请告诉我如何在Django中执行此操作。

我的表名是iptable。在我的ip表的2列中-1是ip_adress,2是date_time保存的数据。一小时后如何将其从数据库中删除?

先谢谢了。如果您需要有关我的代码的任何信息,请告诉我,我将在我的评论部分中提供它。

1 个答案:

答案 0 :(得分:0)

正如评论中提到的那样,此类任务应使用调度程序执行。您可以为此使用Celery或使用不需要安装消息队列服务器的简单库,例如Django-Apscheduler

使用django-apscheduler的非常简化的示例:

# tasks.py
from datetime import datetime, timedelta

from apscheduler.schedulers.background import BackgroundScheduler
from django_apscheduler.jobstores import DjangoJobStore, register_events, register_job

scheduler = BackgroundScheduler()
scheduler.add_jobstore(DjangoJobStore(), "default")

@register_job(scheduler, "interval", seconds=3600)
def delete_ip():
    for record in IpTable.objects.all()
        # I assumed here that date_time is time when your object was created
        time_elapsed = datetime.now() - record.date_time
        if time_elapsed > timedelta(hours=1):
           record.delete()

register_events(scheduler)

您可以在urls.py文件中启动调度程序:


from django.urls import path

from . import views

# import module with your task
from yourapp.tasks import scheduler

urlpatterns = [
    path('', views.index, name='index'),
    # ex: /polls/5/
    path('<int:question_id>/', views.detail, name='detail'),
    # ex: /polls/5/results/
    path('<int:question_id>/results/', views.results, name='results'),
    # ex: /polls/5/vote/
    path('<int:question_id>/vote/', views.vote, name='vote'),
]
scheduler.start()