python / expert
Snippet
Benutzerdefinierter Datenbank-Ausdruck für bitweises UND-Maskieren
Benutzerdefinierte Django-Datenbankausdrücke ermöglichen Low-Level-Datenbankoperationen direkt in QuerySet-Annotationen oder Filtern. `BitwiseAnd` übersetzt bitweise Operationen in rohes SQL unter Einhaltung sicherer Parameterbindung.
snippet.py
python
1
2
3
4
5
6
7
8
9
10
11
from django.db.models.expressions import Expressionclass BitwiseAnd(Expression):def __init__(self, expression, mask):super().__init__()self.expression = expressionself.mask = maskdef as_sql(self, compiler, connection):expr_sql, expr_params = compiler.compile(self.expression)return f"({expr_sql} & %s)", expr_params + [self.mask]
django
Erklärung
1
class BitwiseAnd(Expression):
Leitet von Basis-Expression ab, um benutzerdefinierte SQL-Knoten für Django-Abfragen zu bauen.
2
def __init__(self, expression, mask):
Speichert den Feld- oder F()-Ausdruck und den Integer-Maskenparameter für die SQL-Generierung.
3
def as_sql(self, compiler, connection):
Rendert den Ausdrucksknoten in ein treiberspezifisches SQL-Fragment mit Werten.
4
expr_sql, expr_params = compiler.compile(self.expression)
Delegiert die Kompilierung innerer Ausdrücke an den SQLCompiler.
5
return f"({expr_sql} & %s)", expr_params + [self.mask]
Gibt bitweise UND-SQL-Syntax zurück und fügt den Maskenwert sicher den Parametern hinzu.