sql >> Database teknologi >  >> RDS >> Mysql

Django og skrivebeskyttede databaseforbindelser

Jeg stødte på det samme problem (ved brug af Django 1.11), og dette spørgsmål var øverst i mine Google-resultater for det.

Din første løsning mangler kun én kritisk brik. Du skal fortælle Django, hvilke databasemodeller 'C' og 'D' bruger. Hvad virkede for mig:

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

Fortæl derefter din databaserouter, hvordan den skal opføre sig, når den støder på denne app_label i sektionen allow_migrate():

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

Jeg er ikke sikker på, at det er den mest korrekte løsning i Django-teamets øjne, men effekten er, at allow_migrate() returnerer False for alle modeller, der er defineret med denne app_label-attributværdi.

Django dokumentation om routere nævner ikke dette eksplicit (eller i det mindste med modelkodeeksempler, der gør det klart, hvordan ORM sender værdien for 'db' til allow_migrate()), men mellem attributterne 'app_label' og 'managed' kan du få det at arbejde*.

* I mit tilfælde er standarden postgres, og den skrivebeskyttede database er Oracle 12 via cx_Oracle.



  1. MySQL binær lagring ved hjælp af BLOB VS OS filsystem:store filer, store mængder, store problemer

  2. Barman 2.11:barman-cloud-restore og barman-cloud-wal-restore

  3. SQLDeveloper viser ingen tabeller under forbindelser, hvor der står tabeller

  4. Generer et resultatsæt af stigende datoer i TSQL