python / expert
Snippet
Benutzerdefinierte Datenbank-Ausdrucks-Wrapper für binäre Vault-Hashes
Das Erstellen von Unterklassen von Django Expression ermöglicht das Erstellen benutzerdefinierter Datenbankausdrücke, die in SQL-Funktionen mit speziellen binären Datentypen kompiliert werden.
snippet.py
python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
from django.db.models import Expression, BinaryFieldclass SHA256DigestExpression(Expression):def __init__(self, expression):super().__init__(output_field=BinaryField())self.expression = expressiondef as_sql(self, compiler, connection):sql, params = compiler.compile(self.expression)return f"digest({sql}, 'sha256')", paramsdef get_source_expressions(self):return [self.expression]def set_source_expressions(self, exprs):self.expression = exprs[0]
django
Erklärung
1
class SHA256DigestExpression(Expression):
Erbt von der Django Expression-Basisklasse, um benutzerdefinierte SQL-Generierungslogik zu definieren.
2
def as_sql(self, compiler, connection):
Kompiliert innere Ausdrucksargumente und formatiert die SQL-Syntax der Datenbankfunktion.
3
super().__init__(output_field=BinaryField())
Gibt BinaryField als Rückgabedatentyp für die Django ORM Typumwandlung an.