Потоковая передача данных из 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, но могу ли я передавать данные от БД к клиенту с помощью только одного запроса к БД?