2017-06-14 3 views
1

Ich verwende zwei MySQL-Schemas X und Y, beide enthält mehrere Tabellen, aber es gibt eine Tabelle, die in beiden Schemas den gleichen Namen hat.Wie zwei Tabellen mit demselben Namen in zwei verschiedenen Schema in mysql mit Django verwenden

Beide Schemata sind wie folgt:

+--------------+--+--------------+ 
| X   | | Y   | 
+--------------+--+--------------+ 
| name   | | album_info | 
+--------------+--+--------------+ 
| invite  | | photo_info | 
+--------------+--+--------------+ 
| photo  | | photo  | 
+--------------+--+--------------+ 
| user_details | | temp   | 
+--------------+--+--------------+ 

Jetzt will ich auf beiden Tabellen abfragen, aber wenn ich die Tabellenstruktur in models.py Datei mit dem gleichen Namen schreiben wirft es Fehler/Ausnahme. erklärte ich beide Tabelle in routers.py Datei wie folgt:

modelDatabaseMap = { 
    . 
    'photo': 'default', 
    . 
    . 
    . 
    'photo': 'y', 
} 

(X ist mein Standard-Schema). erklärt i models.py wie folgt:

class Photo(models.Model): 
    id = models.AutoField(db_column='ID', primary_key=True) 
    has_tagged_with = models.IntegerField() 
    has_reposted_with = models.IntegerField() 
    . 
    . 

    class Meta: 
     managed = False 
     db_table = 'photo' 

class Photo(models.Model): 
    id = models.AutoField(db_column='ID', primary_key=True) 
    account_id = models.IntegerField() 
    p_id = models.IntegerField() 
    is_profile = models.IntegerField() 
    . 
    . 

    class Meta: 
     managed = False 
     db_table = 'photo' 

Nun ist die Mehrdeutigkeit zuerst in Namen, in Erklärung in models.py und zweitens in Abfrage-. Ich bin fest, wie auf beide Tabellen getrennt durch orm abzufragen. Jede Hilfe/Führung dazu wäre hilfreich. Danke im Voraus.

+0

Haben Sie eine Verbindung für jedes Schema? Wie ist Ihre 'DATABASES' Konfiguration? –

+0

DATABASES Konfiguration ist wie folgt: 'DATABASES = { 'default': { 'Motor': 'django.contrib.gis.db.backends.mysql', 'NAME': 'X', 'User' : Datenbank-, 'Passwort': DATABASE_PASSWORD, 'HOST': DATABASE_HOST_NAME, 'PORT': '3306', 'OPTIONEN': { 'charset': 'utf8mb4'}, } } ' gleiche Art und Weise I das Schema Y in das Wörterbuch eingefügt. – Shrey

+0

das ist der Punkt. Sie haben zwei Datenbankkonfigurationen? ein 'default' und anderes' y', zum Beispiel? –

Antwort

0

Ihre DATABASES Konfiguration gegeben, können Sie versuchen:

  1. Ihre Modelle Namen ändern oder eine neue App mit einem anderen models Modul für jedes Schema erstellen:

    class YPhoto(models.Model): 
        ... 
    
    class XPhoto(models.Model): 
        ... 
    
  2. ein router.py erstellen Modul:

    class MyRouter(object): 
    
    def db_for_read(self, model, **hints): 
        if model.__name__ == 'YPhoto': 
         return 'Y' 
        return None 
    
    def db_for_write(self, model, **hints): 
        if model.__name__ == 'YPhoto': 
         return 'Y' 
        return None 
    
    def allow_relation(self, obj1, obj2, **hints): 
        # Maybe you want to prevent relations between different schemas, it's up to you 
        return True 
    
    def allow_syncdb(self, db, model): 
        return True 
    
  3. Fügen Sie den Router an den settings.py:

    DATABASE_ROUTERS = ['myapp.models.MyRouter',] 
    

die docs über Datenbank-Routing prüfen.

+0

Hoppla, mir ist aufgefallen, dass Sie in 'if's nach allen Tabellen innerhalb des' Y'-Schemas suchen müssen.Vielleicht ist es besser, eine neue App für die Tabellen im 'Y'-Schema zu erstellen –

+0

Danke, werde das versuchen. – Shrey

+0

Ich würde bitten, eine andere Frage von mir zu beantworten, Link ist unten: https://stackoverflow.com/questions/44496101/how-to-insert-emoji-into-mysql-5-5-and-higher-using- django-orm? noredirect = 1 # Kommentar75996316_44496101 – Shrey

Verwandte Themen