Nota:
- So che abbiamo già
Django ORMche mantiene le cose indipendenti dal database e converte in querySQLspecifiche del database. - Una volta che le cose iniziano a complicarsi, è preferibile scrivere
raw SQLquery per una migliore efficienza. - Quando scrivi
raw sqlquery il tuo codice viene intrappolato con il database che stai utilizzando. - Capisco anche che è importante utilizzare tutta la potenza del tuo database che non può essere raggiunto solo con
django orm.
La mia domanda:
- Fino a quando non utilizzo una funzione specifica del database, perché dovremmo essere intrappolati con il database.
- Ad esempio:
We have a query with multiple joins and we decided to write a raw sql query. Now, that makes my website
postgresspecific. Even when I have not used any postgres specific feature.
Credo che ci dovrebbe essere un po 'di fake sql linguaggio che può tradurre in qualsiasi query sql di un database. Anche l'ORM di Django può essere costruito su di esso. Quindi, se esci da ORM ma non da database specifico, puoi comunque rimanere indipendente dal database.
Ho chiesto la stessa domanda a Jacob Kaplan Moss (Di persona):
- Mi ha consigliato di stare con il database che mi piace e sopportare tutto il suo potere, al quale sono d'accordo. Ma il mio punto non era che dovremmo essere
database independent. - Il punto è che dovremmo essere indipendenti dal database fino a quando non utilizzeremo una funzione specifica del database.
Spiega, perché dovrebbe esserci un layer fake sql sul sql attuale?
================================
Aggiornamento:
================================
Il mio suggerimento:
Risolvi l'indipendenza del database su un livello fake sql e quindi crea ORM su quel falso sql. Quindi, se devo scrivere una query sql, userò fake sql che funzionerebbe su tutti i database e ancora su SQL raw. In questo modo, rimarrò indipendente dal database a meno che non utilizzi una funzione molto specifica per il mio database.
Pertanto, una query come select * from table limit 10; funzionerà sia su postgres sia su 'MS-SQL Server'.
È ragionevole?
Nota:
- Non sto parlando di
ANSI SQL, sto suggerendo unfake sqlper far funzionare tutti i database con 1 sql standard. [Che potrebbe non coprire le funzionalità specifiche di db]