Come posso generare questa query sql dal modello senza utilizzare il metodo objects.raw()? DB è MySQL.Come applicare la funzione md5 al field in django orm?
SELECT * FROM model_table WHERE MD5(field) = 'my value';
Come posso generare questa query sql dal modello senza utilizzare il metodo objects.raw()? DB è MySQL.Come applicare la funzione md5 al field in django orm?
SELECT * FROM model_table WHERE MD5(field) = 'my value';
Avete due modi:
primo modo: Extra
Extra metodo: Entry.objects.extra(where=["MD5(field) = 'my value'"])
Pro: veloce codifica.
Contro: non indicizzabile, scansione completa, prestazioni scadenti.
Secondo modo: nuovo campo
Aggiunta nuovo campo del modello, field_md5
e impostarlo su save
.
import hashlib
myModel(models.Model):
field = models.CharField(max_length=30)
field_md5 = models.CharField(max_length=16, editable = false)
def save(self, *args, **kwargs):
self.field_md5 = hashlib.md5.new(self.field).digest()
super(Model, self).save(*args, **kwargs)
Pro: prestazioni veloci.
Contro: modifiche al database richieste.
Grazie. Questo è il migliore che abbiamo per questo. Scelgo il primo, passando per "dove" kwarg. Fullscan è evitato da altre condizioni in cui l'indicizzazione è in corso. La cosa importante è che non possiamo usare il metodo del modello .get() per aggiungere più condizioni alla richiesta. La versione finale è: Entry.objects.filter (** condizioni) .extra (dove = {'MD5 (campo)': 'il mio valore'})) –