Beispiel: Verwenden der Azure-Bibliotheken zum Erstellen einer Datenbank
In diesem Beispiel wird veranschaulicht, wie Sie die Azure SDK-Verwaltungsbibliotheken in einem Python-Skript verwenden, um eine Azure-Datenbank für flexible Serverinstanz und -datenbank für MySQL zu erstellen. Darüber hinaus finden Sie hier ein einfaches Skript zum Abfragen der Datenbank unter Verwendung der Bibliothek „mysql-connector“ (nicht im Azure SDK enthalten). Sie können einen ähnlichen Code verwenden, um eine Azure-Datenbank für flexible Serverinstanz und -datenbank für PostgreSQL zu erstellen.
Entsprechende Azure CLI-Befehle finden Sie weiter unten in diesem Artikel. Wenn Sie die Azure-Portal verwenden möchten, lesen Sie "Erstellen eines MySQL-Servers" oder "Erstellen eines PostgreSQL-Servers".
Alle Befehle in diesem Artikel funktionieren in Linux-/macOS-Bash- und Windows-Befehlsshells identisch, sofern nicht anders angegeben.
1: Einrichten Ihrer lokalen Entwicklungsumgebung
Falls noch nicht geschehen, richten Sie eine Umgebung ein, in der Sie den Code ausführen können. Hier einige Optionen:
Konfigurieren Sie eine virtuelle Python-Umgebung. Sie können die virtuelle Umgebung lokal oder in Azure Cloud Shell erstellen und den Code dort ausführen. Aktivieren Sie unbedingt die virtuelle Umgebung, um sie zu verwenden.
Verwenden Sie eine Conda-Umgebung.
Verwenden Sie einen Dev-Container in Visual Studio Code oder GitHub Codespaces.
2: Installieren der erforderlichen Azure-Bibliothekspakete
Erstellen Sie eine Datei namens requirements.txt mit folgendem Inhalt:
azure-mgmt-resource
azure-mgmt-rdbms
azure-identity
mysql-connector-python
Installieren Sie in einem Terminal mit aktivierter virtueller Umgebung die Anforderungen:
pip install -r requirements.txt
Hinweis
Wenn Sie unter Windows versuchen, die MySQL-Bibliothek in einer 32-Bit-Python-Bibliothek zu installieren, tritt ein Fehler für die Datei mysql.h auf. Installieren Sie in diesem Fall eine 64-Bit-Version von Python, und versuchen Sie es noch mal.
3: Schreiben von Code zum Erstellen der Datenbank
Erstellen Sie eine Python-Datei mit dem Namen provision_db.py und dem folgenden Code. Die Details werden in den Kommentaren erläutert: Geben Sie insbesondere Umgebungsvariablen für AZURE_SUBSCRIPTION_ID
und PUBLIC_IP_ADDRESS
. Letztere Variable ist die IP-Adresse Ihrer Arbeitsstation, damit dieses Beispiel ausgeführt werden kann. Sie können WhatsIsMyIP verwenden, um Ihre IP-Adresse zu finden.
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}")
Authentifizierung im Code
Später in diesem Artikel melden Sie sich mit der Azure CLI bei Azure an, um den Beispielcode auszuführen. Wenn Ihr Konto über Berechtigungen zum Erstellen von Ressourcengruppen und Speicherressourcen in Ihrem Azure-Abonnement verfügt, wird der Code erfolgreich ausgeführt.
Um diesen Code in einem Produktionsskript zu verwenden, können Sie Umgebungsvariablen so festlegen, dass eine dienstprinzipalbasierte Methode für die Authentifizierung verwendet wird. Weitere Informationen finden Sie unter Authentifizieren von Python-Apps mit Azure-Diensten. Sie müssen sicherstellen, dass der Dienstprinzipal über ausreichende Berechtigungen zum Erstellen von Ressourcengruppen und Speicherressourcen in Ihrem Abonnement verfügt, indem Sie ihm eine entsprechende Rolle in Azure zuweisen, z. B. die Rolle "Mitwirkender " in Ihrem Abonnement.
Referenzlinks für im Code verwendete Klassen
- ResourceManagementClient (azure.mgmt.resource)
- MySQLManagementClient (azure.mgmt.rdbms.mysql_flexibleservers)
- Server (azure.mgmt.rdbms.mysql_flexibleservers.models)
- ServerVersion (azure.mgmt.rdbms.mysql_flexibleservers.models)
Informationen zum PostreSQL-Datenbankserver finden Sie unter:
4: Ausführen des Skripts
Falls noch nicht geschehen, melden Sie sich mit der Azure CLI bei Azure an:
az login
Legen Sie die
AZURE_SUBSCRIPTION_ID
Variablen undPUBLIC_IP_ADDRESS
Umgebungsvariablen fest. Sie können den Befehl "az account show" ausführen, um Ihre Abonnement-ID aus der Eigenschaft in derid
Ausgabe abzurufen. Sie können WhatsIsMyIP verwenden, um Ihre IP-Adresse zu finden.Legen Sie optional die
DB_SERVER_NAME
Variablen undDB_ADMIN_NAME
DB_ADMIN_PASSWORD
Umgebungsvariablen fest. Andernfalls werden Codestandardwerte verwendet.Ausführen des Skripts:
python provision_db.py
5: Einfügen eines Datensatzes und Abfragen der Datenbank
Erstellen Sie eine Datei namens use_db.py mit folgendem Code. Beachten Sie die Abhängigkeiten von den DB_SERVER_NAME
Variablen ,, DB_ADMIN_NAME
und DB_ADMIN_PASSWORD
Umgebungsvariablen. Sie erhalten diese Werte aus der Ausgabe der Ausführung des vorherigen Codes provision_db.py oder im Code selbst.
Dieser Code funktioniert nur für MySQL; Sie verwenden unterschiedliche Bibliotheken für 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()
In diesem Code wird die API „mysql.connector“ verwendet. Der einzige Azure-spezifische Teil ist die vollständige Hostdomäne für den MySQL-Server (mysql.database.azure.com).
Laden Sie als Nächstes das Zertifikat herunter, das für die Kommunikation über TSL/SSL mit Ihrer Azure-Datenbank für MySQL-Server https://www.digicert.com/CACerts/BaltimoreCyberTrustRoot.crt.pem erforderlich ist, und speichern Sie die Zertifikatdatei im selben Ordner wie die Python-Datei. Weitere Informationen finden Sie unter Abrufen eines SSL-Zertifikats in der Azure-Datenbank für MySQL-Dokumentation.
Führen Sie schließlich den Code aus:
python use_db.py
Wenn ein Fehler angezeigt wird, dass Ihre Client-IP-Adresse nicht zulässig ist, überprüfen Sie, ob Sie die Umgebungsvariable richtig definiert haben PUBLIC_IP_ADDRESS
. Wenn Sie den MySQL-Server bereits mit der falschen IP-Adresse erstellt haben, können Sie eine weitere in der Azure-Portal hinzufügen. Wählen Sie im Portal den MySQL-Server und dann Verbinden ion Sicherheit aus. Fügen Sie die IP-Adresse Ihrer Arbeitsstation zur Liste der zulässigen IP-Adressen hinzu.
6: Ressourcen bereinigen
Führen Sie den Befehl "az group delete " aus, wenn Sie die in diesem Beispiel erstellte Ressourcengruppe und Speicherressourcen nicht beibehalten müssen.
Ressourcengruppen verursachen keine laufenden Gebühren in Ihrem Abonnement, aber Ressourcen wie Speicherkonten in der Ressourcengruppe verursachen möglicherweise weiterhin Gebühren. Es empfiehlt sich, jede Gruppe zu sauber, die Sie nicht aktiv verwenden. Das Argument --no-wait
ermöglicht die direkte Rückgabe des Befehls, und es muss nicht auf den Abschluss des Vorgangs gewartet werden.
az group delete -n PythonAzureExample-DB-rg --no-wait
Sie können auch die ResourceManagementClient.resource_groups.begin_delete
-Methode verwenden, um eine Ressourcengruppe aus dem Code zu löschen. Der Code im Beispiel: Erstellen einer Ressourcengruppe veranschaulicht die Verwendung.
Zur Referenz: äquivalente Azure CLI-Befehle
Mit den folgenden Azure CLI-Befehlen können die gleichen Bereitstellungsschritte ausgeführt werden wie mit dem Python-Skript. Verwenden Sie az postgres flexible-server
für eine PostgreSQL-Datenbank Befehle.
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
Weitere Informationen
- Beispiel: Erstellen einer Ressourcengruppe
- Beispiel: Auflisten von Ressourcengruppen in einem Abonnement
- Beispiel: Erstellen von Azure Storage
- Beispiel: Verwenden von Azure Storage
- Beispiel: Erstellen und Bereitstellen einer Web-App
- Beispiel: Erstellen eines virtuellen Computers
- Verwenden verwalteter Azure-Datenträger mit den Azure-Bibliotheken (SDK) für Python
- Kurze Umfrage zum Azure SDK für Python
Feedback
https://aka.ms/ContentUserFeedback.
Bald verfügbar: Im Laufe des Jahres 2024 werden wir GitHub-Issues stufenweise als Feedbackmechanismus für Inhalte abbauen und durch ein neues Feedbacksystem ersetzen. Weitere Informationen finden Sie unterFeedback senden und anzeigen für