The Django Documentation is really really good. Tiene básicamente dos opciones para ejecutar SQL sin formato. Puede usar Manager.raw()
para realizar consultas sin procesar que devuelven instancias del modelo, o puede evitar la capa del modelo y ejecutar SQL personalizado directamente.
Utilizando el raw()
gerente:
>>> for p in Person.objects.raw('SELECT * FROM myapp_person'):
... print p
John Smith
Jane Jones
Si desea omitir la capa de modelo directamente puede utilizar django.db.connection
que representa la conexión de base de datos por defecto:
def my_custom_sql():
from django.db import connection, transaction
cursor = connection.cursor()
# Data modifying operation - commit required
cursor.execute("UPDATE bar SET foo = 1 WHERE baz = %s", [self.baz])
transaction.commit_unless_managed()
# Data retrieval operation - no commit required
cursor.execute("SELECT foo FROM bar WHERE baz = %s", [self.baz])
row = cursor.fetchone()
return row
por qué le gustaría utilizar SQL prima para que la consulta sobre el filtrado y contar? – DTing
No hay ninguna razón práctica para este caso. Solo para ver/saber cómo hacerlo. – David542