Példa: Adatbázis létrehozása az Azure-kódtárak használatával
Ez a példa bemutatja, hogyan használhatja az Azure SDK felügyeleti kódtárait egy Python-szkriptben egy rugalmas Azure Database for MySQL-kiszolgálópéldány és -adatbázis létrehozásához. Emellett egy egyszerű szkriptet is biztosít az adatbázis lekérdezéséhez a mysql-connector kódtár használatával (nem része az Azure SDK-nak). Hasonló kóddal rugalmas Azure Database for PostgreSQL-kiszolgálópéldányt és -adatbázist hozhat létre.
A cikk későbbi részében az egyenértékű Azure CLI-parancsok szerepelnek. Ha inkább az Azure Portalt szeretné használni, olvassa el a MySQL-kiszolgáló létrehozása vagy a PostgreSQL-kiszolgáló létrehozása című témakört.
A cikkben szereplő összes parancs ugyanúgy működik a Linux/macOS bash és a Windows parancshéjakban, hacsak fel nem jegyezzük.
1: A helyi fejlesztési környezet beállítása
Ha még nem tette meg, hozzon létre egy környezetet, ahol futtathatja a kódot. Íme néhány lehetőség:
Python virtuális környezet konfigurálása. Létrehozhatja a virtuális környezetet helyileg vagy az Azure Cloud Shellben, és ott futtathatja a kódot. Mindenképpen aktiválja a virtuális környezetet a használat megkezdéséhez.
Használjon conda környezetet.
Használjon Dev-tárolót a Visual Studio Code-ban vagy a GitHub Codespace-ben.
2: A szükséges Azure-kódtárcsomagok telepítése
Hozzon létre egy requirements.txt nevű fájlt a következő tartalommal:
azure-mgmt-resource
azure-mgmt-rdbms
azure-identity
mysql-connector-python
A virtuális környezetet aktiváló terminálon telepítse a következő követelményeket:
pip install -r requirements.txt
Feljegyzés
Windows rendszeren a mysql-kódtár 32 bites Python-kódtárba való telepítésével hibaüzenet jelenik meg a mysql.h fájllal kapcsolatban. Ebben az esetben telepítse a Python 64 bites verzióját, és próbálkozzon újra.
3: Kód írása az adatbázis létrehozásához
Hozzon létre egy provision_db.py nevű Python-fájlt a következő kóddal. A megjegyzések ismertetik a részleteket. Különösen adja meg a környezeti változókat az és PUBLIC_IP_ADDRESS
a AZURE_SUBSCRIPTION_ID
. Az utóbbi változó a munkaállomás IP-címe a minta futtatásához. A WhatsIsMyIP használatával megkeresheti az IP-címét.
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}")
Hitelesítés a kódban
A cikk későbbi részében az Azure CLI-vel jelentkezik be az Azure-ba a mintakód futtatásához. Ha a fiókja rendelkezik erőforráscsoportok és tárerőforrások Azure-előfizetésben való létrehozásához szükséges engedélyekkel, a kód sikeresen lefut.
Ha éles szkriptben szeretné használni az ilyen kódot, a környezeti változókat úgy állíthatja be, hogy egyszerű szolgáltatásalapú módszert használjon a hitelesítéshez. További információ: Python-alkalmazások hitelesítése az Azure-szolgáltatásokkal. Gondoskodnia kell arról, hogy a szolgáltatásnév megfelelő engedélyekkel rendelkezzen ahhoz, hogy erőforráscsoportokat és tárolási erőforrásokat hozzon létre az előfizetésében, ha megfelelő szerepkört rendel hozzá az Azure-ban, például az előfizetés közreműködői szerepkörét.
A kódban használt osztályok hivatkozásai
- ResourceManagementClient (azure.mgmt.resource)
- MySQLManagementClient (azure.mgmt.rdbms.mysql_flexibleservers)
- Kiszolgáló (azure.mgmt.rdbms.mysql_flexibleservers.models)
- ServerVersion (azure.mgmt.rdbms.mysql_flexibleservers.models)
A PostreSQL-adatbáziskiszolgálóval kapcsolatban lásd:
4: A szkript futtatása
Ha még nem tette meg, jelentkezzen be az Azure-ba az Azure CLI használatával:
az login
Állítsa be a környezeti és
PUBLIC_IP_ADDRESS
aAZURE_SUBSCRIPTION_ID
környezeti változókat. Az az account show parancs futtatásával lekérheti az előfizetés azonosítóját aid
kimenetben lévő tulajdonságból. A WhatsIsMyIP használatával megkeresheti az IP-címét.Ha szeretné, állítsa be a
DB_SERVER_NAME
,DB_ADMIN_NAME
ésDB_ADMIN_PASSWORD
a környezeti változókat, ellenkező esetben a kód alapértelmezései lesznek használva.Futtassa a szkriptet:
python provision_db.py
5: Rekord beszúrása és az adatbázis lekérdezése
Hozzon létre egy use_db.py nevű fájlt az alábbi kóddal. Figyelje meg a , DB_ADMIN_NAME
és DB_ADMIN_PASSWORD
a DB_SERVER_NAME
környezeti változók függőségeit. Ezeket az értékeket az előző kód futtatásának kimenetéből provision_db.py vagy magában a kódban kapja meg.
Ez a kód csak a MySQL-hez működik; a PostgreSQL-hez különböző kódtárakat használ.
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()
Ez a kód a mysql.connector API-t használja. Az egyetlen Azure-specifikus rész a MySQL-kiszolgáló teljes gazdatartománya (mysql.database.azure.com).
Ezután töltse le a TSL/SSL protokollon keresztüli kommunikációhoz szükséges tanúsítványt az Azure Database for MySQL-kiszolgálóval https://www.digicert.com/CACerts/BaltimoreCyberTrustRoot.crt.pem , és mentse a tanúsítványfájlt a Python-fájllal megegyező mappába. További információ: SSL-tanúsítvány beszerzése az Azure Database for MySQL dokumentációjában.
Végül futtassa a kódot:
python use_db.py
Ha hibaüzenet jelenik meg, hogy az ügyfél IP-címe nem engedélyezett, ellenőrizze, hogy helyesen definiálta-e a környezeti változót PUBLIC_IP_ADDRESS
. Ha már rossz IP-címmel hozta létre a MySQL-kiszolgálót, hozzáadhat egy másikat az Azure Portalon. A portálon válassza ki a MySQL-kiszolgálót, majd válassza a Csatlakozás ion security lehetőséget. Adja hozzá a munkaállomás IP-címét az engedélyezett IP-címek listájához.
6: Erőforrások törlése
Futtassa az az group delete parancsot, ha nem kell megőriznie az ebben a példában létrehozott erőforráscsoportot és tárerőforrásokat.
Az erőforráscsoportok nem számolnak fel folyamatos díjakat az előfizetésben, de az erőforráscsoportban lévő erőforrások, például a tárfiókok továbbra is díjakat vonhatnak maga után. Ajánlott minden olyan csoportot megtisztítani, amelyet nem használ aktívan. Az --no-wait
argumentum lehetővé teszi, hogy a parancs azonnal visszatérjen a művelet befejezésére való várakozás helyett.
az group delete -n PythonAzureExample-DB-rg --no-wait
A metódussal ResourceManagementClient.resource_groups.begin_delete
egy erőforráscsoportot is törölhet a kódból. A példakód : Erőforráscsoport létrehozása a használatot mutatja be.
Hivatkozás: egyenértékű Azure CLI-parancsok
Az alábbi Azure CLI-parancsok ugyanazokat a kiépítési lépéseket hajtják végre, mint a Python-szkript. PostgreSQL-adatbázisokhoz használjon az postgres flexible-server
parancsokat.
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
Lásd még
- Példa: Erőforráscsoport létrehozása
- Példa: Erőforráscsoportok listázása előfizetésben
- Példa: Azure Storage létrehozása
- Példa: Az Azure Storage használata
- Példa: Webalkalmazás létrehozása és üzembe helyezése
- Példa: Virtuális gép létrehozása
- Azure Managed Disks használata virtuális gépekkel
- Rövid felmérés befejezése a Pythonhoz készült Azure SDK-ról
Visszajelzés
https://aka.ms/ContentUserFeedback.
Hamarosan elérhető: 2024-ben fokozatosan kivezetjük a GitHub-problémákat a tartalom visszajelzési mechanizmusaként, és lecseréljük egy új visszajelzési rendszerre. További információ:Visszajelzés küldése és megtekintése a következőhöz: