Örnek: Veritabanı oluşturmak için Azure kitaplıklarını kullanma
Bu örnekte, MySQL için Azure Veritabanı esnek sunucu örneği ve veritabanı oluşturmak için Python betiğinde Azure SDK yönetim kitaplıklarının nasıl kullanılacağı gösterilmektedir. Ayrıca mysql-connector kitaplığını (Azure SDK'nın parçası değil) kullanarak veritabanını sorgulamak için basit bir betik sağlar. PostgreSQL için Azure Veritabanı esnek bir sunucu örneği ve veritabanı oluşturmak için benzer kodu kullanabilirsiniz.
Eşdeğer Azure CLI komutları bu makalenin devamındadır. Azure portalını kullanmayı tercih ediyorsanız bkz . MySQL sunucusu oluşturma veya PostgreSQL sunucusu oluşturma.
Bu makaledeki tüm komutlar, not edilmediği sürece Linux/macOS bash ve Windows komut kabuklarında aynı şekilde çalışır.
1: Yerel geliştirme ortamınızı ayarlama
Henüz yapmadıysanız kodu çalıştırabileceğiniz bir ortam ayarlayın. Aşağıda bazı seçenekleri görebilirsiniz:
veya seçtiğiniz aracı kullanarak
venv
bir Python sanal ortamı yapılandırın. Sanal ortamı yerel olarak veya Azure Cloud Shell'de oluşturabilir ve kodu orada çalıştırabilirsiniz. Kullanmaya başlamak için sanal ortamı etkinleştirdiğinizden emin olun.Conda ortamı kullanın.
Visual Studio Code veya GitHub Codespaces'ta Geliştirme Kapsayıcısı kullanın.
2: Gerekli Azure kitaplık paketlerini yükleme
aşağıdaki içeriklere sahip requirements.txt adlı bir dosya oluşturun:
azure-mgmt-resource
azure-mgmt-rdbms
azure-identity
mysql-connector-python
Sanal ortamın etkinleştirildiği bir terminalde gereksinimleri yükleyin:
pip install -r requirements.txt
Not
Windows'da, mysql kitaplığını 32 bit Python kitaplığına yüklemeye çalışmak mysql.h dosyasıyla ilgili bir hata oluşturur. Bu durumda Python'ın 64 bit sürümünü yükleyin ve yeniden deneyin.
3: Veritabanını oluşturmak için kod yazma
Aşağıdaki kodla provision_db.py adlı bir Python dosyası oluşturun. Açıklamalar ayrıntıları açıklar. Özellikle ve PUBLIC_IP_ADDRESS
için AZURE_SUBSCRIPTION_ID
ortam değişkenlerini belirtin. İkinci değişken, bu örneğin çalışması için iş istasyonunuzun IP adresidir. IP adresinizi bulmak için WhatsIsMyIP kullanabilirsiniz.
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}")
Kodda kimlik doğrulaması
Bu makalenin devamında, örnek kodu çalıştırmak için Azure CLI ile Azure'da oturum açarsınız. Hesabınızın Azure aboneliğinizde kaynak grupları ve depolama kaynakları oluşturma izinleri varsa kod başarıyla çalıştırılır.
Bu kodu üretim betiğinde kullanmak için ortam değişkenlerini kimlik doğrulaması için hizmet sorumlusu tabanlı bir yöntem kullanacak şekilde ayarlayabilirsiniz. Daha fazla bilgi edinmek için bkz . Azure hizmetleriyle Python uygulamalarının kimliğini doğrulama. Hizmet sorumlusuna Azure'da uygun bir rol atayarak (örneğin, aboneliğinizdeki Katkıda Bulunan rolü) aboneliğinizde kaynak grupları ve depolama kaynakları oluşturmak için yeterli izinlere sahip olduğundan emin olmanız gerekir.
Kodda kullanılan sınıflar için başvuru bağlantıları
- ResourceManagementClient (azure.mgmt.resource)
- MySQLManagementClient (azure.mgmt.rdbms.mysql_flexibleservers)
- Sunucu (azure.mgmt.rdbms.mysql_flexibleservers.models)
- ServerVersion (azure.mgmt.rdbms.mysql_flexibleservers.models)
PostreSQL veritabanı sunucusu için bkz:
4: Betiği çalıştırma
Henüz yapmadıysanız Azure CLI kullanarak Azure'da oturum açın:
az login
AZURE_SUBSCRIPTION_ID
vePUBLIC_IP_ADDRESS
ortam değişkenlerini ayarlayın. Çıkıştaki özelliğindenid
abonelik kimliğinizi almak için az account show komutunu çalıştırabilirsiniz. IP adresinizi bulmak için WhatsIsMyIP kullanabilirsiniz.İsteğe bağlı olarak, ,
DB_ADMIN_NAME
veDB_ADMIN_PASSWORD
ortam değişkenlerini ayarlayınDB_SERVER_NAME
; aksi takdirde kod varsayılanları kullanılır.Betiği çalıştırın:
python provision_db.py
5: Kayıt ekleme ve veritabanını sorgulama
Aşağıdaki kodla use_db.py adlı bir dosya oluşturun. , DB_ADMIN_NAME
ve DB_ADMIN_PASSWORD
ortam değişkenlerine DB_SERVER_NAME
bağımlılıkları not edin. Bu değerleri, önceki kodun provision_db.py veya kodun kendisinde çalıştırma çıkışından alırsınız.
Bu kod yalnızca MySQL için çalışır; PostgreSQL için farklı kitaplıklar kullanırsınız.
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()
Bu kodun tümü mysql.connector API'sini kullanır. Azure'a özgü tek bölüm, MySQL sunucusu (mysql.database.azure.com) için tam konak etki alanıdır.
Ardından, MySQL için Azure Veritabanı sunucunuzla https://www.digicert.com/CACerts/BaltimoreCyberTrustRoot.crt.pem TSL/SSL üzerinden iletişim kurmak için gereken sertifikayı indirin ve sertifika dosyasını Python dosyasıyla aynı klasöre kaydedin. Daha fazla bilgi için MySQL için Azure Veritabanı belgelerinde SSL Sertifikası Alma bölümüne bakın.
Son olarak kodu çalıştırın:
python use_db.py
İstemci IP adresinize izin verilmediğini belirten bir hata görürseniz ortam değişkenini PUBLIC_IP_ADDRESS
doğru tanımlamış olup olmadığınızı denetleyin. MySQL sunucusunu yanlış IP adresiyle oluşturduysanız Azure portalında başka bir sunucu ekleyebilirsiniz. Portalda MySQL sunucusunu ve ardından Bağlantı güvenliği'ni seçin. İş istasyonunuzun IP adresini izin verilen IP adresleri listesine ekleyin.
6: Kaynakları temizleme
Bu örnekte oluşturulan kaynak grubunu ve depolama kaynaklarını tutmanız gerekmiyorsa az group delete komutunu çalıştırın.
Kaynak grupları aboneliğinizde devam eden bir ücret ödemez, ancak kaynak grubundaki depolama hesapları gibi kaynaklar ücretlendirilmeye devam edebilir. Etkin olarak kullanmadığınız tüm grupları temizlemek iyi bir uygulamadır. --no-wait
bağımsız değişkeni, işlemin bitmesini beklemek yerine komutun hemen döndürülmesini sağlar.
az group delete -n PythonAzureExample-DB-rg --no-wait
Bir kaynak grubunu koddan silmek için yöntemini de kullanabilirsiniz ResourceManagementClient.resource_groups.begin_delete
. Örnek: Kaynak grubu oluşturma içindeki kod kullanımı gösterir.
Başvuru için: eşdeğer Azure CLI komutları
Aşağıdaki Azure CLI komutları, Python betiğiyle aynı sağlama adımlarını tamamlar. PostgreSQL veritabanı için komutları kullanın az postgres flexible-server
.
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
Ayrıca bkz.
- Örnek: Kaynak grubu oluşturma
- Örnek: Abonelikteki kaynak gruplarını listeleme
- Örnek: Azure Depolama oluşturma
- Örnek: Azure Depolama'yı kullanma
- Örnek: Web uygulaması oluşturma ve dağıtma
- Örnek: Sanal makine oluşturma
- Sanal makinelerle Azure Yönetilen Diskler kullanma
- Python için Azure SDK hakkında kısa bir anket tamamlama