Ultimamente ho fatto molte ricerche sull'uso di Pyramid con SQLAlchemy rispetto a mantenere un'applicazione corrente in Django. Questo è di per sé un intero dibattito, ma non sono qui per discuterne.Esempio di ciò che SQLAlchemy può fare e Django ORM non può
Quello che voglio sapere è, perché SQLAlchemy è universalmente considerato migliore di Django ORM? Quasi tutti, se non tutti, i confronti che ho trovato tra i due favori di SQLAlchemy. Presumo che le prestazioni siano grandi, in quanto la struttura di SQLAlchemy consente di tradurre in SQL molto più agevolmente.
Ma, ho anche sentito che con compiti più difficili, Django ORM è quasi impossibile da usare. Voglio scoprire quanto enorme possa essere un problema. Sto leggendo uno dei motivi per passare a SQLAlchemy è quando Django ORM non si adatta più alle tue esigenze.
Quindi, in breve, qualcuno potrebbe fornire una query (non deve essere la sintassi SQL effettiva) che SQLAlchemy può fare, ma Django ORM non può fare a meno di aggiungere in SQL raw aggiuntivo?
Aggiornamento:
Ho notato questa domanda ottenere un po 'di attenzione da quando ho chiesto, quindi mi piacerebbe buttare nei miei extra di due centesimi.
Alla fine abbiamo finito per usare SQLAlchemy e devo dire che sono contento della decisione.
Sto rivisitando questa domanda per fornire una funzionalità aggiuntiva di SQLAlchemy che, finora, non sono stato in grado di replicare in Django ORM. Se qualcuno può fornire un esempio di come farlo, mangerò volentieri le mie parole.
Diciamo che si desidera utilizzare una funzione postgresql, come similarity(), che fornisce un confronto fuzzy (vedi: Finding similar strings with PostgreSQL quickly - tl; dr input due stringhe restituiscono una somiglianza percentuale).
Ho effettuato alcune ricerche su come eseguire questa operazione utilizzando l'ORM Django e non ho trovato nient'altro che l'utilizzo di sql raw come sembra essere evidente dalla loro documentazione: https://docs.djangoproject.com/en/dev/topics/db/sql/.
cioè
Model.objects.raw('SELECT * FROM app_model ORDER BY \
similarity(name, %s) DESC;', [input_name])
SQLAlchemy, però, ha func(), come descritto qui: http://docs.sqlalchemy.org/en/latest/core/sqlelement.html#sqlalchemy.sql.expression.func
from sqlalchemy import desc, func
session.query(Model).order_by(func.similarity(Model.name, input_name))
Ciò consente di generare SQL per qualsiasi sql/PostgreSQL definito/funzione, ecc e non richiede raw sql.
https://docs.djangoproject.com/en/1.11/ref/models/expressions/#func-expressions –