Nota:
- So che abbiamo già
Django ORM
che mantiene le cose indipendenti dal database e converte in querySQL
specifiche del database. - Una volta che le cose iniziano a complicarsi, è preferibile scrivere
raw SQL
query per una migliore efficienza. - Quando scrivi
raw sql
query 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
postgres
specific. 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 sql
per far funzionare tutti i database con 1 sql standard. [Che potrebbe non coprire le funzionalità specifiche di db]