Django: objects.raw() результирующий запрос, но не записи
Я новичок в django, у меня есть один фундаментальный и один технический вопросы.
Я использую БД Postgres. Я использовал psycopg2 соединение/курсор для получения данных, при установлении соединения возникла некоторая задержка. Я читал, что ORM заботится о низкоуровневых действиях, таких как установление соединения и т.д. Если я использую django, ORM позаботится о вызове соединения? 1.1. Могу ли я ожидать то же самое (низкоуровневые действия) с raw()?
- objects.raw(sql) возвращает запрос, но не записи из таблицы.
.
- <QuerySet [<Student: Anil>]>
- <RawQuerySet: select * from api_student> --> это задача, не пропустил ли я что-нибудь .
- ('Anil', 'kumar')
Я определил модель студента следующим образом
class Student(models.Model):
firstname = models.CharField(max_length=100)
surname = models.CharField(max_length=100)
def __str__(self):
return self.firstname
Во время создания представления,
def studentList(request):
#posts = Student.objects.all() --> 1. working as expected (fetching all records firstname)
cursor = connection.cursor()
sql = "select * from api_student"
cursor.execute(sql)
posts = cursor.fetchone() --> 2. returning entire record
#posts = Student.objects.raw(sql) --> 3. RETURNING SQL QUERY NOT RECORD FROM TABLE ???
print(posts)
return render(request, 'output.html', {'posts':posts})
вывод:
Метод raw() принимает необработанный sql-запрос, выполняет его и возвращает экземпляр RawQuerySet. Вы можете итерировать RawQuerySet как обычный QuerySet и получать объекты.
sql = "select * from api_student"
student_qs = Student.objects.raw(sql)
for obj in student_qs:
print(obj.pk, obj.firstname, obj.surname)