Потоковая передача данных из Postgres в http-запрос с помощью Django StreamingHttpResponse

Я хочу позволить своим пользователям загружать данные из БД Postgres, независимо от размера запрашиваемых данных. Для этого я хотел бы передавать данные из БД пользователю в потоковом режиме.

Я видел, что StreamingHttpResponse полезен для потоковой передачи HTTP-ответа, и в документации Django есть сниппет, который показывает, как передать большой CSV-файл.

Я также видел, что psycopg2 имеет некоторые возможности потокового вещания, но я не могу найти способ "соединить" два потока.

Я пробовал что-то вроде:

class Echo:
"""An object that implements just the write method of the file-like
interface.
"""

    def write(self, value):
        """Write the value by returning it, instead of storing in a buffer."""
        return value

def stream(request):
    sql_query = sql.SQL(
            """
            COPY (select * from table) TO STDOUT WITH CSV HEADER
            """)
    # create the file like object            
    pseudo_buffer = Echo()

    # I would like data to flow from the DB to HTTP response
    with connection.cursor() as cursor:
        return StreamingHttpResponse(cursor.copy_expert(sql_query, pseudo_buffer), content_type="text/csv", headers={"Content-Disposition": 'attachment; filename="somefilename.csv"'},)

Я могу сделать много небольших SQL-запросов и передавать данные по частям с помощью StreamingHttpResponse, но могу ли я передавать данные от БД к клиенту с помощью только одного запроса к БД?

Вернуться на верх