Aracılığıyla paylaş


Hızlı Başlangıç: PostgreSQL için Azure Veritabanı'na bağlanmak ve verileri sorgulamak için Python kullanma

Bu hızlı başlangıçta Python kullanarak PostgreSQL için Azure Veritabanı esnek sunucu örneğine 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ı'na 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.

Prerequisites

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

  • PostgreSQL için Azure Veritabanı esnek sunucu örneğinizi Özel erişim (sanal ağ Tümleştirmesi) ile 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 Veritabanı esnek sunucu örneğiniz ile oluşturulan sanal ağa ekleyebilirsiniz. Ağ bağlantısına bakın.
  • PostgreSQL için Azure Veritabanı esnek sunucu örneğinizi 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, sunucu örneğiniz için Microsoft Entra kimlik doğrulaması yapılandırılmalıdır ve sunucu örneğinde Microsoft Entra yöneticisi olarak atanmalısınız. Microsoft Entra kimlik doğrulamasının yapılandırıldığından ve sunucu örneğinizde Microsoft Entra yöneticisi olarak atandığınızdan emin olmak için Microsoft Entra tümleştirmesini yapılandırma makalesindeki adımları izleyin.

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

Kodu çalıştırmak ve sanal ortam oluşturup etkinleştirmek istediğiniz bir klasöre geçin. 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 sunucu örneğiniz ile 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ı: Bu girdilerle bir requirements.txt oluşturun ve yeniden üretilebilir yüklemeler için ile python -m pip install -r requirements.txt yükleyin.

  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 örneği 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 Kimliği ile kimlik doğrulaması yapmak ve sunucu örneğinizde işlem yapmanıza izin veren bir belirteç almak için kullanır DefaultAzureCredential . DefaultAzureCredential kimlik doğrulaması kimlik bilgisi türleri zincirini destekler. Desteklenen kimlik bilgileri arasında Azure CLI, Azure PowerShell veya Azure Developer CLI gibi geliştirici araçlarıyla oturum açtığınız kimlik bilgileri yer alır.


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üzün türüne ve ardından dosya adı ( örneğinpython) yazınpython postgres-insert.py.

Tablo oluşturma ve veri ekleme

Aşağıdaki kod örneği, işlevini kullanarak psycopg.connect PostgreSQL için Azure Veritabanı 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 Veritabanı esnek sunucu veritabanınıza bağlanır ve verileri güncelleştirmek için sql UPDATE deyimiyle cursor.execute 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()