Hızlı Başlangıç: Esnek PostgreSQL için Azure Veri Tabanı sunucuya bağlanmak ve verileri sorgulamak için Python kullanma

Bu hızlı başlangıçta, Python kullanarak PostgreSQL için Azure Veri Tabanı esnek bir sunucuya bağlanacaksınız. Ardından sql deyimlerini kullanarak veritabanındaki verileri macOS, Ubuntu Linux ve Windows platformlarından sorgular, ekler, güncelleştirir ve silersiniz.

Bu makaledeki adımlar iki kimlik doğrulama yöntemini içerir: Microsoft Entra kimlik doğrulaması ve PostgreSQL kimlik doğrulaması. Parolasız sekmesi Microsoft Entra kimlik doğrulamasını, Parola sekmesi ise PostgreSQL kimlik doğrulamasını gösterir.

Microsoft Entra kimlik doğrulaması, Microsoft Entra Kimliği'nde tanımlanan kimlikleri kullanarak PostgreSQL için Azure Veritabanı bağlanmaya yönelik bir mekanizmadır. Microsoft Entra kimlik doğrulaması ile veritabanı kullanıcı kimliklerini ve diğer Microsoft hizmetlerini merkezi bir konumda yönetebilirsiniz ve bu da izin yönetimini basitleştirir. Daha fazla bilgi edinmek için bkz . PostgreSQL için Azure Veritabanı ile Microsoft Entra kimlik doğrulaması.

PostgreSQL kimlik doğrulaması PostgreSQL'de depolanan hesapları kullanır. Hesaplar için kimlik bilgileri olarak parolaları kullanmayı seçerseniz, bu kimlik bilgileri tabloda depolanır user . Bu parolalar PostgreSQL'de depolandığından, parolaların döndürmesini kendiniz yönetmeniz gerekir.

Bu makalede Python kullanarak geliştirme konusunda bilgi sahibi olduğunuz ancak PostgreSQL için Azure Veritabanı ile çalışmaya yeni olduğunuz varsayılır.

Önkoşullar

İstemci iş istasyonunuz için güvenlik duvarı kuralları ekleme

  • Özel erişim (sanal ağ Tümleştirmesi) ile PostgreSQL için Azure Veri Tabanı esnek sunucunuzu oluşturduysanız, sunucunuzla aynı sanal ağ içindeki bir kaynaktan sunucunuza bağlanmanız gerekir. Bir sanal makine oluşturabilir ve bunu PostgreSQL için Azure Veri Tabanı esnek sunucunuzla oluşturulan sanal ağa ekleyebilirsiniz. Ağ bağlantısına bakın.
  • PostgreSQL için Azure Veri Tabanı esnek sunucunuzu Genel erişimle (izin verilen IP adresleri) oluşturduysanız, yerel IP adresinizi sunucunuzdaki güvenlik duvarı kuralları listesine ekleyebilirsiniz. Ağ bağlantısına bakın.

Sunucuda Microsoft Entra tümleştirmesini yapılandırma (yalnızca parolasız)

Parolasız kimlik doğrulaması adımlarını izliyorsanız, sunucunuz için Microsoft Entra kimlik doğrulaması yapılandırılmalıdır ve sunucuda Microsoft Entra yöneticisi olarak atanmalısınız. Microsoft Entra kimlik doğrulamasının yapılandırıldığından ve sunucunuzda Microsoft Entra yöneticisi olarak atandığınızdan emin olmak için Microsoft Entra tümleştirmesini yapılandırma sayfasındaki adımları izleyin.

Geliştirme ortamınızı hazırlama

Kodu çalıştırmak istediğiniz klasöre geçin. Sanal ortam oluşturma ve etkinleştirme. Sanal ortam, belirli bir Python sürümüne ek olarak bu uygulama için gereken diğer paketler için bağımsız bir dizindir.

Sanal ortam oluşturmak ve etkinleştirmek için aşağıdaki komutları çalıştırın:

py -3 -m venv .venv
.venv\Scripts\activate

Python kitaplıklarını yükleme

Kod örneklerini çalıştırmak için gereken Python kitaplıklarını yükleyin.

Azure SDK genelinde Microsoft Entra belirteci kimlik doğrulaması desteği sağlayan azure-identity kitaplığını yükleyin.

# Use the interpreter-bound pip to ensure installs go into the active venv/interpreter
python -m pip install --upgrade pip
python -m pip install azure-identity azure-keyvault-secrets

Kimlik doğrulama kodu ekleme

Bu bölümde, çalışma dizininize kimlik doğrulama kodu ekler ve sunucunuzla kimlik doğrulaması ve yetkilendirme için gereken ek adımları gerçekleştirirsiniz.

Kimlik doğrulama kodunu eklemeden önce, her örnek için gerekli paketlerin yüklendiğinden emin olun.

Gerekli paketler (bu makaledeki örnekler):

  • Parolasız örnek: azure-identity, azure-keyvault-secrets (Key Vault kullanıyorsanız)
  • Parola örneği: psycopg (önerilen: python -m pip install "psycopg[binary]")

İsteğe bağlı: Tekrarlanabilir kurulumlar için bu girdilerle bir requirements.txt oluşturun ve python -m pip install -r requirements.txt ile kurun.

  1. Aşağıdaki kodu bir düzenleyiciye kopyalayın ve get_conn.py adlı bir dosyaya kaydedin.

    import urllib.parse
    import os
    
    from azure.identity import DefaultAzureCredential
    
    # IMPORTANT! This code is for demonstration purposes only. It's not suitable for use in production.
    # For example, tokens issued by Microsoft Entra ID have a limited lifetime (24 hours by default).
    # In production code, you need to implement a token refresh policy.
    
    def get_connection_uri():
    
        # Read URI parameters from the environment
        dbhost = os.environ['DBHOST']
        dbname = os.environ['DBNAME']
        dbuser = urllib.parse.quote(os.environ['DBUSER'])
        sslmode = os.environ['SSLMODE']
    
        # Use passwordless authentication via DefaultAzureCredential.
        # IMPORTANT! This code is for demonstration purposes only. DefaultAzureCredential() is invoked on every call.
        # In practice, it's better to persist the credential across calls and reuse it so you can take advantage of token
        # caching and minimize round trips to the identity provider. To learn more, see:
        # https://github.com/Azure/azure-sdk-for-python/blob/main/sdk/identity/azure-identity/TOKEN_CACHING.md
        credential = DefaultAzureCredential()
    
        # Call get_token() to get a token from Microsft Entra ID and add it as the password in the URI.
        # Note the requested scope parameter in the call to get_token, "https://ossrdbms-aad.database.windows.net/.default".
        password = credential.get_token("https://ossrdbms-aad.database.windows.net/.default").token
    
        db_uri = f"postgresql://{dbuser}:{password}@{dbhost}/{dbname}?sslmode={sslmode}"
        return db_uri
    
  2. Veritabanı bağlantı bilgilerini alın.

    1. Azure portalında PostgreSQL için Azure Veritabanı esnek sunucu adınızı arayın ve seçin.
    2. Sunucunun Genel Bakış sayfasında, tam Sunucu adını kopyalayın. Tam Sunucu adı her zaman my-server-name.postgres.database.azure.com< biçimindedir>.
    3. Soldaki menüde , Güvenlik'in altında Kimlik Doğrulaması'nı seçin. Hesabınızın Microsoft Entra Admins altında listelendiğinden emin olun. Aksi takdirde, Sunucuda Microsoft Entra tümleştirmesini yapılandırma (yalnızca parolasız) adımlarını tamamlayın.
  3. Bağlantı URI öğeleri için ortam değişkenlerini ayarlayın:

    set DBHOST=<server-name>
    set DBNAME=<database-name>
    set DBUSER=<username>
    set SSLMODE=require
    
  4. İş istasyonunuzda Azure'da oturum açın. Azure CLI, Azure PowerShell veya Azure Geliştirici CLI kullanarak oturum açabilirsiniz.

    Kimlik doğrulama kodu, Microsoft Entra ID’ye kimlik doğrulaması yapmak ve sunucunuz üzerinde işlemler gerçekleştirmenize yetki veren bir belirteç almak için DefaultAzureCredential kullanır. DefaultAzureCredential kimlik doğrulaması kimlik bilgisi türleri zincirini destekler. Desteklediği kimlik bilgileri arasında Azure CLI, Azure PowerShell veya geliştirici CLI'sı Azure gibi kullanarak geliştirici araçlarında oturum açabileceğiniz kimlik bilgileri bulunur.


Python örneklerini çalıştırma

Bu makaledeki her kod örneği için:

  1. Metin düzenleyicisinde yeni bir dosya oluşturun.

  2. Kod örneğini dosyaya ekleyin.

  3. Dosyayı proje klasörünüzde postgres-insert.py gibi bir.py uzantısıyla kaydedin. Windows için, dosyayı kaydederken UTF-8 kodlamasının seçili olduğundan emin olun.

  4. Proje klasörünüzde, ardından dosya adını yazın python , örneğin python postgres-insert.py.

Tablo oluşturma ve veri ekleme

Aşağıdaki kod örneği, psycopg.connect işlevini kullanarak PostgreSQL için Azure Veri Tabanı esnek sunucu veritabanınıza bağlanır ve verileri bir SQL INSERT deyimiyle yükler. işlevi sql cursor.execute sorgusunu veritabanına karşı yürütür.

import psycopg
from get_conn import get_connection_uri

conn_string = get_connection_uri()

conn = psycopg.connect(conn_string)
print("Connection established")
cursor = conn.cursor()

# Drop previous table of same name if one exists
cursor.execute("DROP TABLE IF EXISTS inventory;")
print("Finished dropping table (if existed)")

# Create a table
cursor.execute("CREATE TABLE inventory (id serial PRIMARY KEY, name VARCHAR(50), quantity INTEGER);")
print("Finished creating table")

# Insert some data into the table
cursor.execute("INSERT INTO inventory (name, quantity) VALUES (%s, %s);", ("banana", 150))
cursor.execute("INSERT INTO inventory (name, quantity) VALUES (%s, %s);", ("orange", 154))
cursor.execute("INSERT INTO inventory (name, quantity) VALUES (%s, %s);", ("apple", 100))
print("Inserted 3 rows of data")

# Clean up
conn.commit()
cursor.close()
conn.close()

Kod başarıyla çalıştırıldığında aşağıdaki çıkışı üretir:

Connection established
Finished dropping table (if existed)
Finished creating table
Inserted 3 rows of data

Veriyi oku

Aşağıdaki kod örneği PostgreSQL için Azure Veritabanı esnek sunucu veritabanınıza bağlanır ve verileri okumak için SQL SELECT deyimiyle cursor.execute kullanır. Bu işlev bir sorguyu kabul eder ve cursor.fetchall() kullanarak yinelemek için bir sonuç kümesi döndürür.

import psycopg
from get_conn import get_connection_uri

conn_string = get_connection_uri()

conn = psycopg.connect(conn_string)
print("Connection established")
cursor = conn.cursor()

# Fetch all rows from table
cursor.execute("SELECT * FROM inventory;")
rows = cursor.fetchall()

# Print all rows
for row in rows:
    print("Data row = (%s, %s, %s)" %(str(row[0]), str(row[1]), str(row[2])))

# Cleanup
conn.commit()
cursor.close()
conn.close()

Kod başarıyla çalıştırıldığında aşağıdaki çıkışı üretir:

Connection established
Data row = (1, banana, 150)
Data row = (2, orange, 154)
Data row = (3, apple, 100)

Verileri güncelleştirme

Aşağıdaki kod örneği, PostgreSQL için Azure Veri Tabanı esnek sunucusu veritabanınıza bağlanır ve verileri güncelleştirmek için SQL UPDATE deyimiyle cursor.execute yöntemini kullanır.

import psycopg
from get_conn import get_connection_uri

conn_string = get_connection_uri()

conn = psycopg.connect(conn_string)
print("Connection established")
cursor = conn.cursor()

# Update a data row in the table
cursor.execute("UPDATE inventory SET quantity = %s WHERE name = %s;", (200, "banana"))
print("Updated 1 row of data")

# Cleanup
conn.commit()
cursor.close()
conn.close()

Verileri sil

Aşağıdaki kod örneği PostgreSQL için Azure Veritabanı esnek sunucu veritabanınıza bağlanır ve daha önce eklediğiniz bir envanter öğesini silmek için SQL DELETE deyimiyle cursor.execute komutunu kullanır.

import psycopg
from get_conn import get_connection_uri

conn_string = get_connection_uri()

conn = psycopg.connect(conn_string)
print("Connection established")
cursor = conn.cursor()

# Delete data row from table
cursor.execute("DELETE FROM inventory WHERE name = %s;", ("orange",))
print("Deleted 1 row of data")

# Cleanup
conn.commit()
cursor.close()
conn.close()