Abbiamo fatto abbastanza estesamente nelle nostre applicazioni con MySQL per aggirare il limite del database singolo di Django. La nostra applicazione ha un paio di database che vivono in una singola istanza MySQL. Possiamo ottenere un modello di database incrociato in questo modo, purché abbiamo creato visualizzazioni per ogni tabella nel database "corrente".
Per quanto riguarda gli inserti/aggiornamenti nelle viste, con i nostri casi d'uso, una vista è fondamentalmente una "selezione * da [db.table];". In altre parole, non facciamo alcun joins o filtro complesso, quindi il trigger insert/updates da save() funziona correttamente. Se il tuo caso d'uso richiede join così complessi o estesi filtri, sospetto che non avrai problemi con gli scenari di sola lettura, ma potresti incontrare problemi di inserimento/aggiornamento. Penso che ci siano alcuni vincoli sottostanti in MySQL che ti impediscono di aggiornare le viste che attraversano tabelle, hanno filtri complessi, ecc.
In ogni caso, il tuo chilometraggio può variare se stai usando un RDBMS diverso da MySQL, ma Django non lo fa mi interessa davvero se è seduto sopra un tavolo fisico o una vista. Sarà il RDBMS a determinare se funzioni effettivamente come previsto. Come notato in precedenza da un commentatore, è probabile che stiate proiettando syncdb fuori dalla finestra, anche se abbiamo lavorato con successo con un segnale post-syncdb che elimina la tabella fisica creata da Django e lancia il comando "create view ...". Tuttavia, il segnale post-syncdb è un po 'esoterico nel modo in cui viene attivato, per cui anche qui c'è l'emptor.
EDIT: Naturalmente da "segnale post-syncdb" Voglio dire "post-syncdb ascoltatore"
fonte
2009-02-07 02:56:26
Per il comando syncdb, non inserire la classe del modello per la vista in models.py ma in un file separato! –
Migliore: vedere la risposta seguente su managed = False nella classe Meta sul modello. –
Alla vista non è necessario avere lo stesso nome dell'app. Basta usare il campo Meta db_table. Ad esempio, visualizza named its_a_View. class Meta: db_table = u'its_a_view ' – grantk