python / expert
Snippet
Dynamischer asynchroner Datenbank-Router mit Instanz-Hinweisen
Ein benutzerdefinierter Datenbank-Router, der Hinweise auf Instanzebene prüft, um Leseabfragen dynamisch zwischen Haupt- und asynchronen Replika-Datenbanken zu leiten.
snippet.py
python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
from typing import Type, Optionalfrom django.db import modelsclass AsyncReplicaRouter:def db_for_read(self, model: Type[models.Model], **hints) -> str:if getattr(hints.get("instance"), "_use_primary", False):return "default"return "replica_async"def db_for_write(self, model: Type[models.Model], **hints) -> str:return "default"def allow_relation(self, obj1: models.Model, obj2: models.Model, **hints) -> Optional[bool]:db_set = {"default", "replica_async"}if obj1._state.db in db_set and obj2._state.db in db_set:return Truereturn None
django
Erklärung
1
class AsyncReplicaRouter:
Deklariert eine benutzerdefinierte Datenbank-Routing-Strategieklasse für Django-Anwendungen.
2
def db_for_read(self, model: Type[models.Model], **hints) -> str:
Bestimmt anhand von Ausführungshinweisen, an welchen Datenbank-Alias Leseoperationen geleitet werden.
3
if getattr(hints.get("instance"), "_use_primary", False):
Prüft Modellinstanz-Attribute, um Leserepliken gezielt zu umgehen.
4
def allow_relation(self, obj1: models.Model, obj2: models.Model, **hints) -> Optional[bool]:
Prüft, ob Fremdschlüssel-Beziehungen zwischen angegebenen Datenbank-Aliase zulässig sind.