Příklad: Vytvoření databáze pomocí knihoven Azure
Tento příklad ukazuje, jak pomocí knihoven pro správu sady Azure SDK ve skriptu Pythonu vytvořit instanci a databázi flexibilního serveru Azure Database for MySQL. Poskytuje také jednoduchý skript pro dotazování databáze pomocí knihovny mysql-connector (nikoli součástí sady Azure SDK). Podobný kód můžete použít k vytvoření instance a databáze flexibilního serveru Azure Database for PostgreSQL.
Ekvivalentní příkazy Azure CLI jsou dále v tomto článku. Pokud dáváte přednost použití webu Azure Portal, přečtěte si téma Vytvoření serveru MySQL nebo vytvoření serveru PostgreSQL.
Všechny příkazy v tomto článku fungují stejně v prostředích Bash pro Linux/macOS a Windows, pokud není uvedeno.
1: Nastavení místního vývojového prostředí
Pokud jste to ještě neudělali, nastavte prostředí, ve kterém můžete kód spustit. Zde je uvedeno několik možností:
Nakonfigurujte virtuální prostředí Pythonu pomocí
venv
libovolného nástroje nebo nástroje. Virtuální prostředí můžete vytvořit místně nebo v Azure Cloud Shellu a spustit ho tam. Nezapomeňte aktivovat virtuální prostředí, abyste ho mohli začít používat.Použijte prostředí Conda.
Použijte vývojový kontejner v editoru Visual Studio Code nebo GitHub Codespaces.
2: Instalace potřebných balíčků knihovny Azure
Vytvořte soubor s názvem requirements.txt s následujícím obsahem:
azure-mgmt-resource
azure-mgmt-rdbms
azure-identity
mysql-connector-python
V terminálu s aktivovaným virtuálním prostředím nainstalujte požadavky:
pip install -r requirements.txt
Poznámka:
Při pokusu o instalaci knihovny mysql do 32bitové knihovny Pythonu ve Windows dojde k chybě o souboru mysql.h . V tomto případě nainstalujte 64bitovou verzi Pythonu a zkuste to znovu.
3: Napsání kódu pro vytvoření databáze
Vytvořte soubor Pythonu s názvem provision_db.py s následujícím kódem. Komentáře vysvětlují podrobnosti. Konkrétně zadejte proměnné prostředí pro AZURE_SUBSCRIPTION_ID
a PUBLIC_IP_ADDRESS
. Druhá proměnná je IP adresa vaší pracovní stanice, aby se tato ukázka spustila. Pomocí aplikace WhatsIsMyIP můžete najít svou IP adresu.
import random, os
from azure.identity import DefaultAzureCredential
from azure.mgmt.resource import ResourceManagementClient
from azure.mgmt.rdbms.mysql_flexibleservers import MySQLManagementClient
from azure.mgmt.rdbms.mysql_flexibleservers.models import Server, ServerVersion
# Acquire a credential object using CLI-based authentication.
credential = DefaultAzureCredential()
# Retrieve subscription ID from environment variable
subscription_id = os.environ["AZURE_SUBSCRIPTION_ID"]
# Constants we need in multiple places: the resource group name and the region
# in which we provision resources. You can change these values however you want.
RESOURCE_GROUP_NAME = 'PythonAzureExample-DB-rg'
LOCATION = "southcentralus"
# Step 1: Provision the resource group.
resource_client = ResourceManagementClient(credential, subscription_id)
rg_result = resource_client.resource_groups.create_or_update(RESOURCE_GROUP_NAME,
{ "location": LOCATION })
print(f"Provisioned resource group {rg_result.name}")
# For details on the previous code, see Example: Provision a resource group
# at https://docs.microsoft.com/azure/developer/python/azure-sdk-example-resource-group
# Step 2: Provision the database server
# We use a random number to create a reasonably unique database server name.
# If you've already provisioned a database and need to re-run the script, set
# the DB_SERVER_NAME environment variable to that name instead.
#
# Also set DB_USER_NAME and DB_USER_PASSWORD variables to avoid using the defaults.
db_server_name = os.environ.get("DB_SERVER_NAME", f"python-azure-example-mysql-{random.randint(1,100000):05}")
db_admin_name = os.environ.get("DB_ADMIN_NAME", "azureuser")
db_admin_password = os.environ.get("DB_ADMIN_PASSWORD", "ChangePa$$w0rd24")
# Obtain the management client object
mysql_client = MySQLManagementClient(credential, subscription_id)
# Provision the server and wait for the result
poller = mysql_client.servers.begin_create(RESOURCE_GROUP_NAME,
db_server_name,
Server(
location=LOCATION,
administrator_login=db_admin_name,
administrator_login_password=db_admin_password,
version=ServerVersion.FIVE7
)
)
server = poller.result()
print(f"Provisioned MySQL server {server.name}")
# Step 3: Provision a firewall rule to allow the local workstation to connect
RULE_NAME = "allow_ip"
ip_address = os.environ["PUBLIC_IP_ADDRESS"]
# For the above code, create an environment variable named PUBLIC_IP_ADDRESS that
# contains your workstation's public IP address as reported by a site like
# https://whatismyipaddress.com/.
# Provision the rule and wait for completion
poller = mysql_client.firewall_rules.begin_create_or_update(RESOURCE_GROUP_NAME,
db_server_name, RULE_NAME,
{ "start_ip_address": ip_address, "end_ip_address": ip_address }
)
firewall_rule = poller.result()
print(f"Provisioned firewall rule {firewall_rule.name}")
# Step 4: Provision a database on the server
db_name = os.environ.get("DB_NAME", "example-db1")
poller = mysql_client.databases.begin_create_or_update(RESOURCE_GROUP_NAME,
db_server_name, db_name, {})
db_result = poller.result()
print(f"Provisioned MySQL database {db_result.name} with ID {db_result.id}")
Ověřování v kódu
Později v tomto článku se přihlásíte k Azure pomocí Azure CLI a spustíte vzorový kód. Pokud má váš účet oprávnění k vytváření skupin prostředků a prostředků úložiště ve vašem předplatném Azure, kód se úspěšně spustí.
Pokud chcete tento kód použít v produkčním skriptu, můžete nastavit proměnné prostředí tak, aby pro ověřování používaly metodu založenou na instančním objektu. Další informace najdete v tématu Ověřování aplikací v Pythonu pomocí služeb Azure. Musíte zajistit, aby instanční objekt má dostatečná oprávnění k vytváření skupin prostředků a prostředků úložiště ve vašem předplatném tím, že mu v Azure přiřadíte odpovídající roli, například roli Přispěvatel ve vašem předplatném.
Referenční odkazy pro třídy použité v kódu
- ResourceManagementClient (azure.mgmt.resource)
- MySQLManagementClient (azure.mgmt.rdbms.mysql_flexibleservers)
- Server (azure.mgmt.rdbms.mysql_flexibleservers.models)
- ServerVersion (azure.mgmt.rdbms.mysql_flexibleservers.models)
Databázový server PostreSQL najdete tady:
4: Spuštění skriptu
Pokud jste to ještě neudělali, přihlaste se k Azure pomocí Azure CLI:
az login
AZURE_SUBSCRIPTION_ID
Nastavte proměnné prostředí aPUBLIC_IP_ADDRESS
proměnné prostředí. Spuštěním příkazu az account show můžete získat ID předplatnéhoid
z vlastnosti ve výstupu. Pomocí aplikace WhatsIsMyIP můžete najít svou IP adresu.Volitelně můžete nastavit
DB_SERVER_NAME
proměnné ,DB_ADMIN_NAME
aDB_ADMIN_PASSWORD
prostředí. V opačném případě se použijí výchozí hodnoty kódu.Spusťte skript:
python provision_db.py
5: Vložení záznamu a dotazování databáze
Vytvořte soubor s názvem use_db.py s následujícím kódem. Všimněte si závislostí na DB_SERVER_NAME
proměnných prostředí , DB_ADMIN_NAME
a DB_ADMIN_PASSWORD
prostředí. Tyto hodnoty získáte z výstupu spuštění předchozího kódu provision_db.py nebo v samotném kódu.
Tento kód funguje pouze pro MySQL; používáte různé knihovny pro PostgreSQL.
import os
import mysql.connector
db_server_name = os.environ["DB_SERVER_NAME"]
db_admin_name = os.getenv("DB_ADMIN_NAME", "azureuser")
db_admin_password = os.getenv("DB_ADMIN_PASSWORD", "ChangePa$$w0rd24")
db_name = os.getenv("DB_NAME", "example-db1")
db_port = os.getenv("DB_PORT", 3306)
connection = mysql.connector.connect(user=db_admin_name,
password=db_admin_password, host=f"{db_server_name}.mysql.database.azure.com",
port=db_port, database=db_name, ssl_ca='./BaltimoreCyberTrustRoot.crt.pem')
cursor = connection.cursor()
"""
# Alternate pyodbc connection; include pyodbc in requirements.txt
import pyodbc
driver = "{MySQL ODBC 5.3 UNICODE Driver}"
connect_string = f"DRIVER={driver};PORT=3306;SERVER={db_server_name}.mysql.database.azure.com;" \
f"DATABASE={DB_NAME};UID={db_admin_name};PWD={db_admin_password}"
connection = pyodbc.connect(connect_string)
"""
table_name = "ExampleTable1"
sql_create = f"CREATE TABLE {table_name} (name varchar(255), code int)"
cursor.execute(sql_create)
print(f"Successfully created table {table_name}")
sql_insert = f"INSERT INTO {table_name} (name, code) VALUES ('Azure', 1)"
insert_data = "('Azure', 1)"
cursor.execute(sql_insert)
print("Successfully inserted data into table")
sql_select_values= f"SELECT * FROM {table_name}"
cursor.execute(sql_select_values)
row = cursor.fetchone()
while row:
print(str(row[0]) + " " + str(row[1]))
row = cursor.fetchone()
connection.commit()
Veškerý tento kód používá rozhraní API mysql.connectoru. Jediná část specifická pro Azure je úplná hostitelská doména pro server MySQL (mysql.database.azure.com).
Dále stáhněte certifikát potřebný ke komunikaci přes protokol TSL/SSL se serverem https://www.digicert.com/CACerts/BaltimoreCyberTrustRoot.crt.pem Azure Database for MySQL a uložte soubor certifikátu do stejné složky jako soubor Pythonu. Další informace najdete v tématu Získání certifikátu SSL v dokumentaci ke službě Azure Database for MySQL.
Nakonec spusťte kód:
python use_db.py
Pokud se zobrazí chyba, že ip adresa klienta není povolená, zkontrolujte, jestli jste správně definovali proměnnou PUBLIC_IP_ADDRESS
prostředí. Pokud jste už vytvořili server MySQL s nesprávnou IP adresou, můžete na webu Azure Portal přidat další. Na portálu vyberte server MySQL a pak vyberte Zabezpečení připojení. Přidejte IP adresu pracovní stanice do seznamu povolených IP adres.
6: Vyčištění prostředků
Pokud v tomto příkladu nepotřebujete zachovat skupinu prostředků a prostředky úložiště vytvořené v tomto příkladu, spusťte příkaz az group delete .
Ve vašem předplatném se za skupiny prostředků neúčtují žádné průběžné poplatky, ale za prostředky, jako jsou účty úložiště, se ve skupině prostředků můžou dál účtovat poplatky. Je vhodné vyčistit jakoukoli skupinu, kterou aktivně nepoužíváte. Argument --no-wait
umožňuje, aby se příkaz vrátil okamžitě místo čekání na dokončení operace.
az group delete -n PythonAzureExample-DB-rg --no-wait
Metodu ResourceManagementClient.resource_groups.begin_delete
můžete použít také k odstranění skupiny prostředků z kódu. Kód v příkladu: Vytvoření skupiny prostředků ukazuje použití.
Referenční informace: Ekvivalentní příkazy Azure CLI
Následující příkazy Azure CLI dokončí stejné kroky zřizování jako skript Pythonu. Pro databázi PostgreSQL použijte az postgres flexible-server
příkazy.
az group create --location southcentralus --name PythonAzureExample-DB-rg
az mysql flexible-server create --location southcentralus --resource-group PythonAzureExample-DB-rg ^
--name python-azure-example-mysql-12345 --admin-user azureuser --admin-password ChangePa$$w0rd24 ^
--sku-name Standard_B1ms --version 5.7 --yes
# Change the IP address to the public IP address of your workstation, that is, the address shown
# by a site like https://whatismyipaddress.com/.
az mysql flexible-server firewall-rule create --resource-group PythonAzureExample-DB-rg --name python-azure-example-mysql-12345 ^
--rule-name allow_ip --start-ip-address 10.11.12.13 --end-ip-address 10.11.12.13
az mysql flexible-server db create --resource-group PythonAzureExample-DB-rg --server-name python-azure-example-mysql-12345 ^
--database-name example-db1
Viz také
- Příklad: Vytvoření skupiny prostředků
- Příklad: Výpis skupin prostředků v předplatném
- Příklad: Vytvoření služby Azure Storage
- Příklad: Použití Služby Azure Storage
- Příklad: Vytvoření a nasazení webové aplikace
- Příklad: Vytvoření virtuálního počítače
- Použití Azure Spravované disky s virtuálními počítači
- Dokončení krátkého průzkumu o sadě Azure SDK pro Python