Klientská knihovna Azure Tables pro Python – verze 12.4.4
Azure Tables je služba úložiště dat NoSQL, ke které je možné přistupovat odkudkoli na světě prostřednictvím ověřených volání pomocí protokolu HTTP nebo HTTPS.
Tabulky se podle potřeby škálují, aby podporovaly množství vložených dat, a umožňují ukládání dat s nesložitým přístupem.
Klienta Azure Tables je možné použít pro přístup k účtům Azure Storage nebo Cosmos. Tento dokument se zabývá azure-data-tables
.
Upozorňujeme, že tento balíček je náhradou, která azure-cosmosdb-tables
je nyní zastaralá. Další podrobnosti najdete v průvodci migrací .
Zdrojový kód | Balíček (PyPI) | Balíček (Conda) | Referenční dokumentace k | rozhraní APIVzorky
Právní omezení
Podpora balíčků Azure SDK Python pro Python 2.7 skončila 1. ledna 2022. Další informace a dotazy najdete v tématu https://github.com/Azure/azure-sdk-for-python/issues/20691Použití tohoto balíčku vyžaduje Python 3.7 nebo novější. Další podrobnosti najdete v tématu Věnovaném zásadám podpory verzí sady Azure SDK pro Python.
Začínáme
Sada Azure Tables SDK má přístup k účtu Služby Azure Storage nebo CosmosDB.
Požadavky
- K použití tohoto balíčku se vyžaduje Python 3.7 nebo novější.
- Musíte mít předplatné Azure a buď
Vytvoření účtu
- K vytvoření nového účtu úložiště můžete použít Azure Portal, Azure PowerShell nebo Azure CLI:
- Pokud chcete vytvořit nový účet úložiště Cosmos, můžete použít Azure CLI nebo Azure Portal.
Instalace balíčku
Nainstalujte klientskou knihovnu Azure Tables pro Python pomocí pipu:
pip install azure-data-tables
Vytvoření klienta
Knihovna Tabulek Azure umožňuje interakci se dvěma typy prostředků:
- tabulky ve vašem účtu
- entity v těchto tabulkách.
Interakce s těmito prostředky začíná instancí klienta. K vytvoření objektu klienta budete potřebovat adresu URL koncového bodu služby tabulky účtu a přihlašovací údaje, které vám umožní přístup k účtu. Najdete
endpoint
ho na stránce pro váš účet úložiště na webu Azure Portal v části Přístupové klíče nebo spuštěním následujícího příkazu Azure CLI:
# Get the table service URL for the account
az storage account show -n mystorageaccount -g MyResourceGroup --query "primaryEndpoints.table"
Jakmile budete mít adresu URL účtu, můžete ji použít k vytvoření klienta služby:
from azure.data.tables import TableServiceClient
service = TableServiceClient(endpoint="https://<my_account_name>.table.core.windows.net/", credential=credential)
Další informace o adresách URL služby Table Service a postupu při konfiguraci vlastních názvů domén pro Azure Storage najdete v oficiální dokumentaci.
Typy přihlašovacích údajů
Parametr credential
může být poskytnut v několika různých formách v závislosti na typu autorizace, kterou chcete použít. Knihovna Tabulek podporuje následující autorizace:
- Sdílený klíč
- Connection String (Připojovací řetězec)
- Token sdíleného přístupových podpisů
Vytvoření klienta ze sdíleného klíče
Pokud chcete použít sdílený klíč účtu (neboli klíč účtu nebo přístupový klíč), zadejte ho jako řetězec. Najdete ho v účtu úložiště na webu Azure Portal v části Přístupové klíče nebo spuštěním následujícího příkazu Azure CLI:
az storage account keys list -g MyResourceGroup -n MyStorageAccount
K ověření klienta použijte klíč jako parametr přihlašovacích údajů:
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)
Vytvoření klienta z připojovacího řetězce
V závislosti na vašem případu použití a metodě autorizace můžete dát přednost inicializaci instance klienta s připojovacím řetězcem místo zadání adresy URL účtu a přihlašovacích údajů samostatně. Provedete to tak, že předáte připojovací řetězec metodě třídy klienta from_connection_string
. Připojovací řetězec najdete ve vašem účtu úložiště na webu Azure Portal v části Přístupové klíče nebo pomocí následujícího příkazu Azure CLI:
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)
Vytvoření klienta z tokenu SAS
Pokud chcete použít token sdíleného přístupového podpisu (SAS), zadejte ho jako řetězec. Pokud adresa URL vašeho účtu obsahuje token SAS, parametr credential vyněžte. Token SAS můžete vygenerovat z webu Azure Portal v části Sdílený přístupový podpis nebo pomocí některé z generate_*_sas()
funkcí vytvořit token SAS pro účet nebo tabulku:
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))
Klíčové koncepty
Mezi běžná použití služby Table patří:
- Ukládání terabajtů strukturovaných dat, která můžou obsluhovat škálované webové aplikace
- Ukládání datových sad, které nevyžadují složitá spojení, cizí klíče nebo uložené procedury a je možné je zrušit normalizaci pro rychlý přístup
- Rychle dotazování na data pomocí clusterovaného indexu
- Přístup k datům pomocí protokolu OData a výrazů filtru LINQ
Službu Azure Tables Service tvoří následující komponenty:
- Účet
- Tabulka v rámci účtu, která obsahuje sadu entit.
- Entita v tabulce jako slovník
Klientská knihovna Azure Tables pro Python umožňuje interakci s každou z těchto komponent pomocí vyhrazeného objektu klienta.
Klienti
Pro interakci s různými komponentami služby Table Service jsou k dispozici dva různí klienti:
TableServiceClient
-- Získání a nastavení účtu
- Dotazování, vytváření a odstraňování tabulek v rámci účtu
TableClient
Získání přístupu ke konkrétní tabulce pomocíget_table_client
metody
TableClient
-- Pracuje s konkrétní tabulkou (která ještě nemusí existovat).
- Vytváření, odstraňování, dotazování a upsert entit v zadané tabulce
- Vytvořte nebo odstraňte samotnou zadanou tabulku.
Entity
Entity jsou podobné řádkům. Entita má PartitionKey
, RowKey
a sadu vlastností. Vlastnost je pár hodnot názvu, který se podobá sloupci. Každá entita v tabulce nemusí mít stejné vlastnosti. Entity mohou být reprezentovány jako slovníky, jako je tento příklad:
entity = {
'PartitionKey': 'color',
'RowKey': 'brand',
'text': 'Marker',
'color': 'Purple',
'price': '5'
}
- create_entity – Přidejte do tabulky entitu.
- delete_entity – Odstraní entitu z tabulky.
- update_entity – Aktualizujte informace o entitě sloučením nebo nahrazením existující entity.
UpdateMode.MERGE
přidá nové vlastnosti do existující entity, neodstraní existující vlastnosti.UpdateMode.REPLACE
nahradí existující entitu danou entitou a odstraní všechny existující vlastnosti, které nejsou zahrnuté v odeslané entitě.
- query_entities – dotazování existujících entit v tabulce pomocí filtrů OData
- get_entity – Získejte konkrétní entitu z tabulky podle oddílu a klíče řádku.
- upsert_entity – Sloučí nebo nahradí entitu v tabulce. Pokud entita neexistuje, vloží entitu.
UpdateMode.MERGE
přidá nové vlastnosti do existující entity, neodstraní existující vlastnosti.UpdateMode.REPLACE
nahradí existující entitu danou entitou a odstraní všechny existující vlastnosti, které nejsou zahrnuté v odeslané entitě.
Příklady
V následujících částech najdete několik fragmentů kódu, které pokrývají některé nejběžnější úlohy tabulky, mezi které patří:
Vytvoření tabulky
Vytvořte ve svém účtu tabulku a získejte příkaz k TableClient
provádění operací s nově vytvořenou tabulkou:
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)
Vytváření entit
Vytvoření entit v tabulce:
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)
Dotazování entit
Dotazování entit v tabulce:
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]))
Volitelná konfigurace
Volitelné argumenty klíčových slov je možné předat na úrovni klienta a na úrovni jednotlivých operací. Referenční dokumentace azure-core popisuje dostupné konfigurace pro opakování, protokolování, přenosové protokoly a další.
Konfigurace zásad opakování
Při vytváření instance klienta ke konfiguraci zásad opakování použijte následující argumenty klíčových slov:
- retry_total (int): Celkový počet opakovaných pokusů, které se mají povolit. Má přednost před ostatními počty.
retry_total=0
Pokud nechcete opakovat pokusy o žádosti, předejte je. Výchozí hodnota je 10. - retry_connect (int): Kolik chyb souvisejících s připojením se má opakovat. Výchozí hodnota je 3.
- retry_read (int): Kolikrát se má opakovat pokus o chyby čtení. Výchozí hodnota je 3.
- retry_status (int): Kolikrát se má opakovat chybný stavový kód. Výchozí hodnota je 3.
- retry_to_secondary (bool): Jestli se má žádost opakovat na sekundární, pokud je to možné.
Tato možnost by měla být povolená jenom u účtů RA-GRS a je možné zpracovávat potenciálně zastaralá data.
Výchozí hodnota je
False
.
Konfigurace jiného klienta nebo operace
Další volitelné argumenty klíčového slova konfigurace, které lze zadat v klientovi nebo pro každou operaci.
Argumenty klíčových slov klienta:
- connection_timeout (int): Volitelně nastaví hodnotu časového limitu připojení a čtení v sekundách.
- transport (Any): Přenos poskytnutý uživatelem k odeslání požadavku HTTP.
Argumenty klíčových slov pro jednotlivé operace:
- raw_response_hook (volatelné): Dané zpětné volání použije odpověď vrácenou službou.
- raw_request_hook (volatelné): Dané zpětné volání použije požadavek před odesláním do služby.
- client_request_id (str): Nepovinný uživatel zadal identifikaci požadavku.
- user_agent (str): Připojí vlastní hodnotu k hlavičce uživatelského agenta, která se má odeslat spolu s požadavkem.
- logging_enable (bool): Povolí protokolování na úrovni LADĚNÍ. Výchozí hodnota je False. Můžete ho také předat na úrovni klienta, abyste ho povolili pro všechny požadavky.
- headers (dict): Předejte vlastní hlavičky jako klíče a páry hodnot. Např.
headers={'CustomValue': value}
Poradce při potížích
Obecné
Klienti Azure Tables vyvolávají výjimky definované v Azure Core.
Při interakci s knihovnou tabulek Azure pomocí sady Python SDK budou chyby vrácené službou odpovídat stejným stavovým kódům HTTP pro požadavky rozhraní REST API . Operace služby Table Service způsobí HttpResponseError
selhání s užitečnými kódy chyb.
Pokud se například pokusíte vytvořit tabulku, která již existuje, 409
vrátí se chyba označující konflikt.
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))
protokolování
Tato knihovna používá pro protokolování standardní knihovnu protokolování . Základní informace o relacích HTTP (adresy URL, hlavičky atd.) se protokolují na úrovni INFO.
Podrobné protokolování úrovně LADĚNÍ, včetně těl požadavků/odpovědí a nereagovaných hlaviček, je možné povolit na klientovi s argumentem 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)
Podobně logging_enable
může povolit podrobné protokolování pro jednu operaci, i když není povolené pro klienta:
service_client.create_entity(entity=my_entity, logging_enable=True)
Další kroky
Začněte s našimi ukázkami tabulek.
V úložišti GitHubu sady SDK pro tabulky Azure máte k dispozici několik ukázek sady Python SDK. Tyto ukázky poskytují ukázkový kód pro další scénáře, se kterými se při práci s tabulkami běžně setkáváme.
Obvyklé situace
Tyto ukázky kódu ukazují běžné operace scénářů s klientskou knihovnou Azure Tables. Asynchronní verze ukázek (ukázkové soubory Pythonu připojené s _async) zobrazují asynchronní operace.
- Vytváření a odstraňování tabulek: sample_create_delete_table.py (asynchronní verze)
- Tabulky seznamů a dotazů: sample_query_tables.py (asynchronní verze)
- Vložení a odstranění entit: sample_insert_delete_entities.py (asynchronní verze)
- Dotazování a výpis entit: sample_query_table.py (asynchronní verze)
- Aktualizace, upsert a slučování entit: sample_update_upsert_merge_entities.py (asynchronní verze)
- Potvrzení mnoha požadavků v jedné transakci: sample_batching.py (asynchronní verze)
Další dokumentace
Rozsáhlejší dokumentaci k tabulkám Azure najdete v dokumentaci ke službě Azure Tables na docs.microsoft.com.
Známé problémy
Seznam aktuálně známých problémů souvisejících s koncovými body tabulky Cosmos DB najdete tady.
Přispívání
Tento projekt vítá příspěvky a návrhy. Většina příspěvků vyžaduje souhlas s licenční smlouvou s přispěvatelem (CLA), která stanoví, že máte právo udělit nám práva k používání vašeho příspěvku a skutečně tak činíte. Podrobnosti najdete tady: https://cla.microsoft.com
Při odesílání žádosti o přijetí změn robot CLA automaticky určí, jestli je potřeba poskytnout smlouvu CLA, a příslušným způsobem žádost o přijetí změn upraví (např. přidáním jmenovky nebo komentáře). Stačí postupovat podle pokynů robota. Pro všechna úložiště používající naši smlouvu CLA to stačí udělat jenom jednou.
Tento projekt přijal pravidla chování pro Microsoft Open Source. Další informace najdete v nejčastějších dotazech k pravidlům chování nebo se obraťte na opencode@microsoft.com případné další dotazy nebo komentáře.
Azure SDK for Python