1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
import datetime
from django.core.management.base import NoArgsCommand
from django.conf import settings

SESSION_DELETE_BULK_SIZE = getattr(settings, "SESSION_DELETE_BULK_SIZE", 1000)

class Command(NoArgsCommand):
    help = "Can be run as a cronjob or directly to clean out old data from the database (only expired sessions at the moment)."

    def handle_noargs(self, **options):
        from django.contrib.sessions.models import Session
        now = datetime.datetime.utcnow()
        print "Searching for old sessions..."
        while True:
            sessions = Session.objects.filter(
                        expire_date__lt=now
                    ).values('session_key')[0:SESSION_DELETE_BULK_SIZE]
            if not len(sessions):
                print "Finished"
                break
            print "Found %d" % len(sessions),
            key_list = [s['session_key'] for s in sessions]
            Session.objects.filter(session_key__in=key_list).delete()
            print "deleted."