Django: objects.raw() результирующий запрос, но не записи

Я новичок в django, у меня есть один фундаментальный и один технический вопросы.

  1. Я использую БД Postgres. Я использовал psycopg2 соединение/курсор для получения данных, при установлении соединения возникла некоторая задержка. Я читал, что ORM заботится о низкоуровневых действиях, таких как установление соединения и т.д. Если я использую django, ORM позаботится о вызове соединения? 1.1. Могу ли я ожидать то же самое (низкоуровневые действия) с raw()?

  2. objects.raw(sql) возвращает запрос, но не записи из таблицы.

    .

  3. Я определил модель студента следующим образом

    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})
    

    вывод:

    1. <QuerySet [<Student: Anil>]>
    2. <RawQuerySet: select * from api_student> --> это задача, не пропустил ли я что-нибудь
    3. .
    4. ('Anil', 'kumar')

    Метод 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)
    
    Вернуться на верх