sql >> Databasteknik >  >> RDS >> Mysql

Django ORM, infoga ingen datumtid som 0 i MySQL

Med utgångspunkt i Seppos lösning (som inte fungerade för django 1.9.4 på grund av att jag saknade connection.ops.value_to_db_datetime) slutade jag med att använda ett anpassat DateTimeField enligt följande:

from django.db import models

class ZeroDateTimeField(models.DateTimeField):
    def get_db_prep_value(self, value, connection, prepared=False):
        value = super( ZeroDateTimeField, self ).get_db_prep_value( value, connection, prepared )
        if value is None:
            return  "0000-00-00 00:00:00"
        return value

Använd sedan ZeroDateTimeField i dina modeller istället för DateTimeField.

funkar som en smäck och jag kom runt att behöva säga åt kunden att fixa sin mysql db;-)

EDIT:Det slutade med att jag åsidosatte konstruktorn för att ställa in null=True och blank=True för att underlätta användningen av automatiskt genererade modeller. Eftersom detta kan vara användbart för vissa, här är det (detta är valfritt och tveksamt):

def __init__(self, verbose_name=None, name=None, auto_now=False, auto_now_add=False, **kwargs):
    kwargs['null'] = True
    kwargs['blank'] = True
    super( ZeroDateTimeField, self ).__init__(verbose_name, name, auto_now, auto_now_add, **kwargs)


  1. Generera SQL Skapa skript för befintliga tabeller med Query

  2. Hur skulle du implementera sekvenser i Microsoft SQL Server?

  3. Stopwords och MySQL boolesk fulltext

  4. Hur man uppgraderar från MySQL gamla lösenord till nytt lösenordssystem