Что заменяет старый BlockBlobService.get_blob_to_bytes в новом BlobServiceClient?

У меня есть старая лазурная функция, которая использует BlockBlobService ->get_blob_to_bytes. Как описано здесь: https://github.com/uglide/azure-content/blob/master/articles/storage/storage-python-how-to-use-blob-storage.md#download-blobs

Я считаю, что мне нужно обновить BlockBlobService до BlobServiceClient. Но я не могу найти get_blob_to_bytes в BlobServiceClient?

Exception: AttributeError: 'BlobServiceClient' object has no attribute 'get_blob_to_bytes'

Как я могу преобразовать blob в байты с помощью BlobServiceClient?

Редактировать; или мне нужно использовать: https://learn.microsoft.com/en-us/python/api/azure-storage-blob/azure.storage.blob.baseblobservice.baseblobservice?view=azure-python-previous #azure-storage-blob-baseblobservice-baseblobservice-get-blob-to-bytes

Редактировать2; https://github.com/Azure/azure-sdk-for-python/blob/main/sdk/storage/azure-storage-blob/migration_guide.md#storage-blob-service-sdk-migration-guide- от--2x-до-12x

я получил

Name: azure-storage-blob
Version: 12.16.0

Но нет BlobClient.get_blob_to_bytes.... Или, по крайней мере, когда я пытаюсь это сделать??

Edit3: чтобы еще больше запутать, я использую сообщения из очереди. И при создании экземпляра BlobClient ожидается account_url, container_name и blob_name. Все хорошо, если у вас есть контейнер , но у меня есть очередь.

Любой?

Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
0
141
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Но нет BlobClient.get_blob_to_bytes.... Или, по крайней мере, когда я пытаюсь это сделать??

Да, как вы упомянули, в get_blob_to_bytes() нет BlobClient. Однако вы можете получить желаемые результаты, используя download_blob().readall().

from  azure.storage.blob  import  BlobClient

connection_string = "<CONNECTION_STRING>"

client = BlobClient.from_connection_string(connection_string,'container','abc.txt')

blob_bytes = client.download_blob().readall()
print(blob_bytes)

Полученные результаты:


Edit3: чтобы еще больше запутать, я использую сообщения из очереди. И при создании экземпляра BlobClient ожидается account_url, container_name и blob_name. Все хорошо, если у вас есть контейнер , но у меня есть очередь.

Однако, поскольку ваше требование состоит в том, чтобы получить байты из очереди, используйте QueueClient. Ниже приведено то, что вы можете попытаться выполнить.

from azure.storage.queue import QueueClient
import base64

connection_string = "<CONNECTION_STRING>"

queue = QueueClient.from_connection_string(conn_str=connection_string, queue_name='queue')
messages = queue.receive_messages()
for message in messages:
    print(base64.b64decode(message.content).decode('utf-8').encode('utf-8'))

Полученные результаты:

Спасибо, один дополнительный вопрос: в старом коде было Input_blob = BlockBlobService(connection_string) и file = input_blob.get_blob_to_bytes(сообщение['in-container'], сообщение['имя файла']) с использованием некоторых параметров в большом двоичном объекте. Как я могу сделать это с помощью QueueClient. Я на самом деле не понимаю, что здесь делает логика, и это проблема, когда мне нужно ее воссоздать....

otk 17.04.2023 13:35

@otk Службы Blob и Queue разные и имеют разные SDK. Не путайте с Blobs to Queues. У больших двоичных объектов нет такой вещи, как очереди. Поскольку вашим требованием было использовать очередь, я использовал QueueClient, а не BlobClient. Упомянутые строки кода в комментариях принадлежат BlobClient, тогда как в ответе я использовал QueueClient в соответствии с требованием.

SwethaKandikonda 24.04.2023 14:55

Другие вопросы по теме

Похожие вопросы

Telebot Python - как отправить группу фотографий
AttributeError: объект «список» не имеет атрибута «tree_dict» в PySimpleGUI
(РЕШЕНО) Python запускает несуществующий код в VS Code
Почему аутконвертер не вызывается для преобразования байтов в oracledb/cx_Oracle (Python)?
Ошибка при поиске спецификации модуля для «spyder_kernels.console» (ModuleNotFoundError: нет модуля с именем «spyder_kernels»)
Как преобразовать исходный список в другой, который учитывает последовательность минимальных и максимальных значений для каждого элемента исходного списка?
Как переписать sql-функцию row_number() для оконных полярностей python?
Передать адрес памяти в multiprocessing.Process вне его контекста памяти
Как интерпретировать сообщение об ошибке «Foo() не принимает аргументов» при указании экземпляра класса в качестве базового класса?
Сортировка списка точек в соответствии с другим списком для создания прямых линий без каких-либо пересечений