Jak wygenerować zapytanie sql z modelu bez użycia metody objects.raw()? DB to MySQL.Jak zastosować funkcję md5 do pola w django orm?
SELECT * FROM model_table WHERE MD5(field) = 'my value';
Jak wygenerować zapytanie sql z modelu bez użycia metody objects.raw()? DB to MySQL.Jak zastosować funkcję md5 do pola w django orm?
SELECT * FROM model_table WHERE MD5(field) = 'my value';
Czy masz dwa sposoby:
Pierwszy sposób: Dodatkowe
Extra metoda: Entry.objects.extra(where=["MD5(field) = 'my value'"])
Plusy: szybkie kodowanie.
Minusy: nie przyjazny dla indeksu, pełne skanowanie, słaba wydajność.
Drugi sposób: nowe pole
Dodanie nowego pola na modelu field_md5
i ustawić go na 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)
Plusy: wysoka wydajność.
Minusy: wymagane zmiany w bazie danych.
Thanx. To jest dla nas najlepsze. Wybieram pierwszy, przechodzę do "gdzie", kwarg. Fullscan jest unikany przez inne w warunkach indeksowania. Ważne jest to, że nie możemy użyć metody modelu .get(), aby dodać więcej warunków do żądania. Wersja ostateczna to: Entry.objects.filter (warunki **) .extra (gdzie = {'MD5 (pole)': "moja wartość"}) –