Aracılığıyla paylaş


Hızlı Başlangıç: PostgreSQL için Azure Veritabanı - Esnek Sunucu'da verileri bağlamak ve sorgulamak için Python kullanma

ŞUNLAR IÇIN GEÇERLIDIR: PostgreSQL için Azure Veritabanı - Esnek Sunucu

Bu hızlı başlangıçta Python kullanarak PostgreSQL için Azure Veritabanı esnek bir 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ı bağlanmaya yönelik bir mekanizmadır. Microsoft Entra kimlik doğrulaması ile veritabanı kullanıcı kimliklerini ve diğer Microsoft hizmetleri merkezi bir konumda yönetebilir ve bu da izin yönetimini basitleştirir. Daha fazla bilgi edinmek için bkz. PostgreSQL için Azure Veritabanı - Esnek Sunucu 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 esnek PostgreSQL için Azure Veritabanı sunucuyla çalışmaya yeni olduğunuz varsayılır.

Önkoşullar

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

  • Özel erişim (VNet Tümleştirmesi) ile PostgreSQL için Azure Veritabanı esnek sunucu örneğinizi 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. Azure CLI kullanarak PostgreSQL için Azure Veritabanı - Esnek Sunucu sanal ağı oluşturma ve yönetme bölümüne bakın.
  • Genel erişim (izin verilen IP adresleri) ile PostgreSQL için Azure Veritabanı esnek sunucu örneğinizi oluşturduysanız, yerel IP adresinizi sunucunuzdaki güvenlik duvarı kuralları listesine ekleyebilirsiniz. Azure CLI kullanarak PostgreSQL için Azure Veritabanı - Esnek Sunucu güvenlik duvarı kuralları oluşturma ve yönetme bölümüne 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.

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.

  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
    

    Komutlarda aşağıdaki yer tutucu değerlerini değiştirin:

    • <server-name> azure portalından kopyaladığınız değerle birlikte.
    • <username> Azure kullanıcı adınız ile; mesela. john@contoso.com.
    • <database-name>PostgreSQL için Azure Veritabanı esnek sunucu veritabanınızın adıyla. Sunucunuzu oluşturduğunuzda postgres adlı varsayılan veritabanı otomatik olarak oluşturuldu. SQL komutlarını kullanarak bu veritabanını kullanabilir veya yeni bir veritabanı oluşturabilirsiniz.
  4. İş istasyonunuzda Azure'da oturum açın. Azure CLI, Azure PowerShell veya Azure Geliştirici CLI kullanarak oturum açabilirsiniz. Örneğin, Azure CLI aracılığıyla oturum açmak için şu komutu girin:

    az login
    

    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 postgres-insert.py) yazınpython.

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 sql INSERT deyimiyle verileri 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

Verileri okuma

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()

Veri silme

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 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()