sql >> Databasteknik >  >> RDS >> Mysql

Tidstämpelfält i django

Det fanns faktiskt en mycket bra och informativ artikel om detta. Här:http://ianrolfe.livejournal.com/36017.html

Lösningen på sidan är något förlegad, så jag gjorde följande:

from django.db import models
from datetime import datetime
from time import strftime

class UnixTimestampField(models.DateTimeField):
    """UnixTimestampField: creates a DateTimeField that is represented on the
    database as a TIMESTAMP field rather than the usual DATETIME field.
    """
    def __init__(self, null=False, blank=False, **kwargs):
        super(UnixTimestampField, self).__init__(**kwargs)
        # default for TIMESTAMP is NOT NULL unlike most fields, so we have to
        # cheat a little:
        self.blank, self.isnull = blank, null
        self.null = True # To prevent the framework from shoving in "not null".

    def db_type(self, connection):
        typ=['TIMESTAMP']
        # See above!
        if self.isnull:
            typ += ['NULL']
        if self.auto_created:
            typ += ['default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP']
        return ' '.join(typ)

    def to_python(self, value):
        if isinstance(value, int):
            return datetime.fromtimestamp(value)
        else:
            return models.DateTimeField.to_python(self, value)

    def get_db_prep_value(self, value, connection, prepared=False):
        if value==None:
            return None
        # Use '%Y%m%d%H%M%S' for MySQL < 4.1
        return strftime('%Y-%m-%d %H:%M:%S',value.timetuple())

Allt du behöver göra för att använda det är:timestamp = UnixTimestampField(auto_created=True)

I MySQL ska kolumnen visas som:'timestamp' timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,

Enda nackdelen med detta är att det bara fungerar på MySQL-databaser. Men du kan enkelt ändra det för andra.



  1. Databasreorganiseringar – varför de är viktiga

  2. Utmaningar med att skala Moodle PostgreSQL-databasen

  3. Vad betyder det att "normalisera" en databas?

  4. Hur man tar bort dubbletter i SQL-tabell baserat på flera fält