Libreria client tabelle di Azure per Python - versione 12.4.4
Tabelle di Azure è un servizio di archiviazione dati NoSQL accessibile da qualsiasi parte del mondo tramite chiamate autenticate tramite HTTP o HTTPS.
Le tabelle vengono ridimensionate in base alle esigenze per supportare la quantità di dati inseriti e consentono l'archiviazione dei dati con accesso non complesso.
Il client tabelle di Azure può essere usato per accedere agli account di Archiviazione di Azure o Cosmos. In questo documento viene illustrato azure-data-tables
.
Si noti che questo pacchetto è una sostituzione per azure-cosmosdb-tables
il quale è ora deprecato. Per altri dettagli, vedere la guida alla migrazione .
Codice | sorgentePacchetto (PyPI) | Pacchetto (Conda) | Documentazione | di riferimento sulle APICampioni
Dichiarazione di non responsabilità
Il supporto dei pacchetti Python di Azure SDK per Python 2.7 è terminato il 01 gennaio 2022. Per altre informazioni e domande, vedere https://github.com/Azure/azure-sdk-for-python/issues/20691Python 3.7 o versione successiva per usare questo pacchetto. Per altre informazioni, vedere Criteri di supporto per la versione di Azure SDK per Python.
Introduzione
Azure Tables SDK può accedere a un account di Archiviazione di Azure o CosmosDB.
Prerequisiti
- Python 3.7 o versione successiva è necessario per usare questo pacchetto.
- È necessario avere una sottoscrizione di Azure e
Creare un account
- Per creare un nuovo account di archiviazione, è possibile usare il portale di Azure, Azure PowerShell o l'interfaccia della riga di comando di Azure:
- Per creare un nuovo account di archiviazione cosmos, è possibile usare l'interfaccia della riga di comando di Azure o il portale di Azure.
Installare il pacchetto
Installare la libreria client tabelle di Azure per Python con pip:
pip install azure-data-tables
Creare il client
La libreria tabelle di Azure consente di interagire con due tipi di risorse:
- le tabelle nell'account
- le entità all'interno di tali tabelle.
L'interazione con queste risorse inizia con un'istanza di un client. Per creare un oggetto client, è necessario l'URL dell'endpoint del servizio tabelle dell'account e una credenziale che consenta di accedere all'account. È
endpoint
possibile trovare nella pagina dell'account di archiviazione nel portale di Azure nella sezione "Chiavi di accesso" o eseguendo il comando dell'interfaccia della riga di comando di Azure seguente:
# Get the table service URL for the account
az storage account show -n mystorageaccount -g MyResourceGroup --query "primaryEndpoints.table"
Dopo aver ottenuto l'URL dell'account, può essere usato per creare il client del servizio:
from azure.data.tables import TableServiceClient
service = TableServiceClient(endpoint="https://<my_account_name>.table.core.windows.net/", credential=credential)
Per altre informazioni sull'URL del servizio tabelle e su come configurare i nomi di dominio personalizzati per Archiviazione di Azure, vedere la documentazione ufficiale
Tipi di credenziali
Il credential
parametro può essere fornito in diversi formati, a seconda del tipo di autorizzazione che si desidera utilizzare. La libreria Tables supporta le autorizzazioni seguenti:
- Chiave condivisa
- Connection String (Stringa di connessione)
- Token di firma di accesso condiviso
Creazione del client da una chiave condivisa
Per usare una chiave condivisa dell'account (nota anche come chiave dell'account o chiave di accesso), specificare la chiave come stringa. Questo è disponibile nell'account di archiviazione nel portale di Azure nella sezione "Chiavi di accesso" o eseguendo il comando seguente dell'interfaccia della riga di comando di Azure:
az storage account keys list -g MyResourceGroup -n MyStorageAccount
Usare la chiave come parametro delle credenziali per autenticare il client:
from azure.core.credentials import AzureNamedKeyCredential
from azure.data.tables import TableServiceClient
credential = AzureNamedKeyCredential("my_account_name", "my_access_key")
service = TableServiceClient(endpoint="https://<my_account_name>.table.core.windows.net", credential=credential)
Creazione del client da una stringa di connessione
A seconda del caso d'uso e del metodo di autorizzazione, può essere preferibile inizializzare un'istanza client con una stringa di connessione anziché specificare separatamente l'URL e le credenziali dell'account. A tale scopo, passare la stringa di connessione al metodo di classe del from_connection_string
client. La stringa di connessione è disponibile nell'account di archiviazione nel portale di Azure nella sezione "Chiavi di accesso" o con il comando dell'interfaccia della riga di comando di Azure seguente:
az storage account show-connection-string -g MyResourceGroup -n MyStorageAccount
from azure.data.tables import TableServiceClient
connection_string = "DefaultEndpointsProtocol=https;AccountName=<my_account_name>;AccountKey=<my_account_key>;EndpointSuffix=core.windows.net"
service = TableServiceClient.from_connection_string(conn_str=connection_string)
Creazione del client da un token di firma di accesso condiviso
Per usare un token di firma di accesso condiviso (SAS), specificare il token come stringa. Se l'URL dell'account include il token di firma di accesso condiviso, omettere il parametro credential. È possibile generare un token di firma di accesso condiviso dal portale di Azure in Firma di accesso condiviso o usare una delle funzioni per creare un token di firma di generate_*_sas()
accesso condiviso per l'account o la tabella:
from datetime import datetime, timedelta
from azure.data.tables import TableServiceClient, generate_account_sas, ResourceTypes, AccountSasPermissions
from azure.core.credentials import AzureNamedKeyCredential, AzureSasCredential
credential = AzureNamedKeyCredential("my_account_name", "my_access_key")
sas_token = generate_account_sas(
credential,
resource_types=ResourceTypes(service=True),
permission=AccountSasPermissions(read=True),
expiry=datetime.utcnow() + timedelta(hours=1),
)
table_service_client = TableServiceClient(endpoint="https://<my_account_name>.table.core.windows.net", credential=AzureSasCredential(sas_token))
Concetti chiave
Uso comune del servizio tabelle incluso:
- Archiviazione di terabyte di dati strutturati in grado di servire applicazioni su scala Web
- L'archiviazione di set di dati che non richiedono join complessi, chiavi esterne o stored procedure e può essere de normalizzata per l'accesso rapido
- Esecuzione rapida di query sui dati mediante un indice cluster
- Accesso ai dati tramite il protocollo OData e le espressioni di filtro LINQ
I componenti seguenti costituiscono il servizio tabelle di Azure:
- Account
- Tabella all'interno dell'account, che contiene un set di entità
- Entità all'interno di una tabella, come dizionario
La libreria client tabelle di Azure per Python consente di interagire con ognuno di questi componenti tramite l'uso di un oggetto client dedicato.
Client
Vengono forniti due client diversi per interagire con i vari componenti del servizio tabelle:
TableServiceClient
-- Ottenere e impostare l'impostazione dell'account
- Eseguire query, creare ed eliminare tabelle all'interno dell'account.
- Ottenere un
TableClient
oggetto per accedere a una tabella specifica usando ilget_table_client
metodo .
TableClient
-- Interagisce con una tabella specifica (che non è ancora presente).
- Creare, eliminare, eseguire query e upsert entità all'interno della tabella specificata.
- Creare o eliminare la tabella specificata.
Entità
Le entità sono simili alle righe. Un'entità ha un PartitionKey
oggetto , un RowKey
e un set di proprietà. Una proprietà è una coppia nome-valore, simile a una colonna. Ogni entità in una tabella non deve avere le stesse proprietà. Le entità possono essere rappresentate come dizionari come nell'esempio seguente:
entity = {
'PartitionKey': 'color',
'RowKey': 'brand',
'text': 'Marker',
'color': 'Purple',
'price': '5'
}
- create_entity : aggiungere un'entità alla tabella.
- delete_entity : eliminare un'entità dalla tabella.
- update_entity : aggiornare le informazioni di un'entità mediante l'unione o la sostituzione dell'entità esistente.
UpdateMode.MERGE
aggiungerà nuove proprietà a un'entità esistente che non eliminerà le proprietà esistentiUpdateMode.REPLACE
sostituirà l'entità esistente con quella specificata, eliminando eventuali proprietà esistenti non incluse nell'entità inviata
- query_entities : eseguire query sulle entità esistenti in una tabella usando filtri OData.
- get_entity : ottenere un'entità specifica da una tabella per chiave di partizione e riga.
- upsert_entity : consente di unire o sostituire un'entità in una tabella oppure, se l'entità non esiste, inserisce l'entità.
UpdateMode.MERGE
aggiungerà nuove proprietà a un'entità esistente che non eliminerà le proprietà esistentiUpdateMode.REPLACE
sostituirà l'entità esistente con quella specificata, eliminando eventuali proprietà esistenti non incluse nell'entità inviata
Esempio
Le sezioni seguenti forniscono diversi frammenti di codice che illustrano alcune delle attività di tabella più comuni, tra cui:
Creazione di una tabella
Creare una tabella nell'account e ottenere un TableClient
oggetto per eseguire operazioni sulla tabella appena creata:
from azure.data.tables import TableServiceClient
table_service_client = TableServiceClient.from_connection_string(conn_str="<connection_string>")
table_name = "myTable"
table_client = table_service_client.create_table(table_name=table_name)
Creazione di entità
Creare entità nella tabella:
from azure.data.tables import TableServiceClient
from datetime import datetime
PRODUCT_ID = u'001234'
PRODUCT_NAME = u'RedMarker'
my_entity = {
u'PartitionKey': PRODUCT_NAME,
u'RowKey': PRODUCT_ID,
u'Stock': 15,
u'Price': 9.99,
u'Comments': u"great product",
u'OnSale': True,
u'ReducedPrice': 7.99,
u'PurchaseDate': datetime(1973, 10, 4),
u'BinaryRepresentation': b'product_name'
}
table_service_client = TableServiceClient.from_connection_string(conn_str="<connection_string>")
table_client = table_service_client.get_table_client(table_name="myTable")
entity = table_client.create_entity(entity=my_entity)
Query di entità
Esecuzione di query sulle entità nella tabella:
from azure.data.tables import TableClient
my_filter = "PartitionKey eq 'RedMarker'"
table_client = TableClient.from_connection_string(conn_str="<connection_string>", table_name="myTable")
entities = table_client.query_entities(my_filter)
for entity in entities:
for key in entity.keys():
print("Key: {}, Value: {}".format(key, entity[key]))
Configurazione facoltativa
Gli argomenti di parole chiave facoltativi possono essere passati al client e al livello di operazione. La documentazione di riferimento di azure-core descrive le configurazioni disponibili per tentativi, registrazione, protocolli di trasporto e altro ancora.
Configurazione dei criteri di ripetizione
Usare gli argomenti della parola chiave seguenti quando si crea un'istanza di un client per configurare i criteri di ripetizione dei tentativi:
- retry_total (int): numero totale di tentativi consentiti. Ha la precedenza su altri conteggi.
retry_total=0
Passare se non si vuole riprovare alle richieste. Il valore predefinito è 10. - retry_connect (int): numero di errori relativi alla connessione da ritentare. Il valore predefinito è 3.
- retry_read (int): numero di tentativi di ripetizione degli errori di lettura. Il valore predefinito è 3.
- retry_status (int): numero di tentativi per i codici di stato non corretti. Il valore predefinito è 3.
- retry_to_secondary (bool): indica se la richiesta deve essere ritentata a secondaria, se possibile.
Questa opzione deve essere abilitata solo per gli account RA-GRS e i dati potenzialmente non aggiornati possono essere gestiti.
Il valore predefinito è
False
.
Altra configurazione client/per operazione
Altri argomenti di parole chiave di configurazione facoltativi che possono essere specificati nel client o per ogni operazione.
Argomenti di parole chiave client:
- connection_timeout (int): imposta facoltativamente il valore di timeout di connessione e lettura, espresso in secondi.
- transport (Any): trasporto fornito dall'utente per inviare la richiesta HTTP.
Argomenti per parola chiave per operazione:
- raw_response_hook (chiamabile): il callback specificato usa la risposta restituita dal servizio.
- raw_request_hook (chiamabile): il callback specificato usa la richiesta prima di essere inviata al servizio.
- client_request_id (str): identificazione specificata dall'utente facoltativo della richiesta.
- user_agent (str): aggiunge il valore personalizzato all'intestazione user-agent da inviare con la richiesta.
- logging_enable (bool): abilita la registrazione a livello DI DEBUG. Il valore predefinito è False. Può anche essere passato a livello di client per abilitarlo per tutte le richieste.
- intestazioni (dict): passare intestazioni personalizzate come coppie chiave-valore. Ad esempio
headers={'CustomValue': value}
Risoluzione dei problemi
Generale
I client tabelle di Azure generano eccezioni definite in Azure Core.
Quando si interagisce con la libreria tabelle di Azure con Python SDK, gli errori restituiti dal servizio rispondono agli stessi codici di stato HTTP per le richieste dell'API REST . Le operazioni del servizio tabelle genereranno un errore HttpResponseError
con codici di errore utili.
Ad esempio, se si tenta di creare una tabella già esistente, viene restituito un 409
errore che indica "Conflitto".
from azure.data.tables import TableServiceClient
from azure.core.exceptions import HttpResponseError
table_name = 'YourTableName'
service_client = TableServiceClient.from_connection_string(connection_string)
# Create the table if it does not already exist
tc = service_client.create_table_if_not_exists(table_name)
try:
service_client.create_table(table_name)
except HttpResponseError:
print("Table with name {} already exists".format(table_name))
Registrazione
Questa libreria usa la libreria di registrazione standard per la registrazione. Le informazioni di base sulle sessioni HTTP (URL, intestazioni e così via) vengono registrate a livello di INFO.
La registrazione dettagliata a livello di DEBUG, inclusi i corpi di richiesta/risposta e le intestazioni non contrassegnate, può essere abilitata in un client con l'argomento logging_enable
:
import sys
import logging
from azure.data.tables import TableServiceClient
# Create a logger for the 'azure' SDK
logger = logging.getLogger('azure')
logger.setLevel(logging.DEBUG)
# Configure a console output
handler = logging.StreamHandler(stream=sys.stdout)
logger.addHandler(handler)
# This client will log detailed information about its HTTP sessions, at DEBUG level
service_client = TableServiceClient.from_connection_string("your_connection_string", logging_enable=True)
Analogamente, logging_enable
può abilitare la registrazione dettagliata per una singola operazione, anche quando non è abilitata per il client:
service_client.create_entity(entity=my_entity, logging_enable=True)
Passaggi successivi
Introduzione agli esempi di tabella.
Sono disponibili diversi esempi di Python SDK per tabelle di Azure nel repository GitHub dell'SDK. Questi esempi forniscono codice di esempio per scenari aggiuntivi comunemente rilevati durante l'uso delle tabelle.
Scenari comuni
Questi esempi di codice mostrano operazioni comuni sullo scenario con la libreria client tabelle di Azure. Le versioni asincrone degli esempi (i file di esempio Python aggiunti con _async) mostrano operazioni asincrone.
- Creare ed eliminare tabelle: sample_create_delete_table.py (versione asincrona)
- Elencare e eseguire query sulle tabelle: sample_query_tables.py (versione asincrona)
- Inserire ed eliminare entità: sample_insert_delete_entities.py (versione asincrona)
- Eseguire query ed elencare entità: sample_query_table.py (versione asincrona)
- Aggiornare, upsert e unire entità: sample_update_upsert_merge_entities.py (versione asincrona)
- Commit di molte richieste in una singola transazione: sample_batching.py (versione asincrona)
Documentazione aggiuntiva
Per una documentazione più completa sulle tabelle di Azure, vedere la documentazione sulle tabelle di Azure in docs.microsoft.com.
Problemi noti
Un elenco dei problemi attualmente noti relativi agli endpoint di tabella di Cosmos DB è disponibile qui.
Contributo
In questo progetto sono benvenuti i contributi e i suggerimenti. Per la maggior parte dei contenuti è necessario sottoscrivere un contratto di licenza di collaborazione (CLA, Contributor License Agreement) che stabilisce che l'utente ha il diritto di concedere, e di fatto concede a Microsoft i diritti d'uso del suo contributo. Per informazioni dettagliate, vedere https://cla.microsoft.com.
Quando si invia una richiesta pull, un bot CLA determina automaticamente se è necessario specificare un contratto CLA e completare la richiesta pull in modo appropriato (ad esempio con un'etichetta e un commento). Seguire le istruzioni specificate dal bot. È sufficiente eseguire questa operazione una sola volta per tutti i repository che usano il contratto CLA Microsoft.
Questo progetto ha adottato il Codice di comportamento di Microsoft per l'open source. Per altre informazioni, vedere Code of Conduct FAQ (Domande frequenti sul Codice di comportamento Open Source di Microsoft) oppure contattare opencode@microsoft.com per eventuali altre domande o commenti.
Azure SDK for Python