I am trying to delete 3 years old data in my python django db. Here is code:
from datetime import datetime
from dateutil.relativedelta import relativedelta
def db_cleanup():
cleanup_start = datetime.utcnow().date()
three_years_ago = cleanup_start - relativedelta(years=3)
MyData.objects.filter(create_date__lt=three_years_ago).delete()
however I receive RuntimeWarning: DateTimeField received a naive datetime . How to do it properly?
Use timezone.now()
to create an aware datetime then reset time to midnight but keep a datetime object (not date):
from django.utils import timezone
from dateutil.relativedelta import relativedelta
def db_cleanup():
cleanup_start = timezone.now().replace(hour=0, minute=0, second=0, microsecond=0)
three_years_ago = cleanup_start - relativedelta(years=3)
MyData.objects.filter(create_date__lt=three_years_ago).delete()