Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Django i połączenia z bazą danych tylko do odczytu

Natknąłem się na ten sam problem (używając Django 1.11) i to pytanie było na górze moich wyników Google.

W Twoim początkowym rozwiązaniu brakuje tylko jednego krytycznego elementu. Musisz powiedzieć Django, jakich modeli baz danych 'C' i 'D' używają. Co mi się udało:

class ExternalModel(models.Model):
    class Meta:
        managed = False
        abstract = True    
        app_label = 'support'

Następnie powiedz routerowi bazy danych, jak się zachować, gdy napotka etykietę app_label w sekcji allow_migrate():

    def allow_migrate(self, db, app_label, model_name=None, **hints):
        if app_label == 'support':
            return False
        return (db == 'default')

Nie jestem pewien, czy jest to najbardziej poprawne rozwiązanie w oczach zespołu Django, ale efektem jest to, że allow_migrate() zwraca False dla wszystkich modeli zdefiniowanych z tą wartością atrybutu app_label.

dokumentacja Django na temat routerów nie wspomina o tym wprost (lub przynajmniej z przykładami kodu modelu, które wyjaśniają, w jaki sposób ORM przekazuje wartość „db” do allow_migrate()), ale można to uzyskać między atrybutami „app_label” i „managed” do pracy*.

* W moim przypadku domyślną bazą jest postgres, a bazą danych tylko do odczytu jest Oracle 12 przez cx_Oracle.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Wspólne wyrażenie tabelowe w MySQL

  2. MySQL zwraca pierwszy wiersz połączonej tabeli

  3. Jak usunąć zduplikowaną wartość oddzieloną przecinkami w jednej kolumnie w MySQL?

  4. PHP MySQL mysql_fetch_assoc z kluczami tablicy wyróżnianymi oznaczeniami „as”

  5. Jak wybrać datę i godzinę bez sekund w mysql?