Erstellen Sie eine schreibgeschützte MySQL-Datenbankverbindung in Django

8

Ist es möglich, eine Verbindung zu einer Datenbank hinzuzufügen, wenn nur ausgewählte Abfragen zulässig sind?

So etwas wäre großartig:

%Vor%

Ich habe nichts Einfaches gefunden.

    
YardenST 25.07.2014, 07:11
quelle

3 Antworten

5

Soweit ich weiß, bietet Django keine Optionen, um die Datenbankverbindung auf einen "Nur-Lese" -Modus zu beschränken. Sie können dies jedoch tun, indem Sie einen schreibgeschützten Benutzer in Ihrer MySQL-Datenbank-Engine erstellen.

Eine weitere Idee auf der Django-Codepage wäre, einen eigenen Cursor zu erstellen, der eine Ausnahme auslöst, wenn execute oder executemany aufgerufen wird. Sie können dieses Modul django-db-readonly anzeigen.

    
Maxime Lorant 25.07.2014, 07:18
quelle
5

Sie sollten Berechtigungen für den Benutzer festlegen, der für die Verbindung verwendet wird (anstelle von 'root').

Dies führt dazu, dass insert / update / delete-Abfragen Fehler auslösen, die Sie in Ihren Ansichten verwalten sollten (falls erforderlich)

    
Don 25.07.2014 07:20
quelle
4

Ab Django 1.2 können Sie eine Router-Klasse angeben, die Abfragen an verschiedene Datenbanken "routet" () Ссылка ).

Um eine db zum Lesen und eine zum Schreiben zu verwenden, können Sie eine Router-Klasse wie folgt definieren:

%Vor%

Platziere das in deiner settings.py

%Vor%

Dies funktioniert für mich, solange ich select_for_update () nicht verwende, was als Lesevorgang betrachtet wird, aber Schreibzugriff auf die Datenbank benötigt. Die einzige Problemumgehung, die ich bisher gefunden habe, ist, select_for_update in einer Manager-Klasse auf ähnliche Weise zu überschreiben:

%Vor%     
Oberix 22.10.2014 13:03
quelle

Tags und Links