Aracılığıyla paylaş


Python ve mssql-python sürücüsünü kullanarak Azure SQL Veritabanı'na bağlanma ve bu veritabanını sorgulama

Şunlar için geçerlidir:Azure SQL Veritabanı

Bu hızlı başlangıçta, bir uygulamanın Azure SQL Veritabanı'ndaki bir veritabanına nasıl bağlandığı ve Python ile mssql-python sürücüsünü kullanarak sorgular nasıl gerçekleştirebileceğiniz açıklanır. mssql-python sürücüsü, Microsoft Entra kimlik doğrulaması için yerleşik desteğe sahiptir ve bu da parolasız bağlantıları basit hale getirir. Parolasız bağlantılar hakkında daha fazla bilgiyi parolasız hub'dan öğrenebilirsiniz.

Önkoşullar

Veritabanını yapılandırma

Azure SQL Veritabanı için güvenli, parolasız bağlantılar için belirli veritabanı yapılandırmaları gerekir. Hem yerel hem de barındırılan ortamlardaki Azure SQL Veritabanı düzgün bir şekilde bağlanmak için Azure'daki mantıksal sunucunuzda aşağıdaki ayarları doğrulayın:

  1. Yerel geliştirme bağlantıları için Azure SQL mantıksal sunucunuzun yerel makine IP adresinizin ve diğer Azure hizmetlerinin bağlanmasına izin verecek şekilde yapılandırıldığından emin olun:

    1. Azure portalında, kaynak menüsünden Güvenlik altında Ağ'ı seçin.

    2. Ek yapılandırma seçeneklerini göstermek için Seçili ağlar düğmesini seçin.

    3. Yerel makinenizin IPv4 adresinden bağlantıları etkinleştirecek bir güvenlik duvarı kuralı eklemek için İstemci IPv4 adresinizi (xx.xx.xx.xx) ekle'yi seçin. Alternatif olarak, istediğiniz belirli bir IP adresini girmek için + Güvenlik duvarı kuralı ekle'yi de seçebilirsiniz.

    4. Azure hizmetlerinin ve kaynaklarının bu sunucuya erişmesine izin ver onay kutusunun seçili olduğundan emin olun.

      Azure SQL mantıksal sunucu güvenlik duvarı kurallarını yapılandırmayı gösteren Azure portalının ekran görüntüsü.

      Uyarı

      Azure hizmetlerinin ve kaynaklarının bu sunucuya erişmesine izin ver ayarını etkinleştirmek, üretim senaryoları için önerilen bir güvenlik uygulaması değildir. Gerçek uygulamalar daha güçlü güvenlik duvarı kısıtlamaları veya sanal ağ yapılandırmaları gibi daha güvenli yaklaşımlar uygulamalıdır.

      Aşağıdaki kaynaklarda veritabanı güvenlik yapılandırmaları hakkında daha fazla bilgi edinebilirsiniz:

  2. Sunucuda ayrıca Microsoft Entra kimlik doğrulaması etkinleştirilmiş ve atanmış bir Microsoft Entra yönetici hesabı olmalıdır. Yerel geliştirme bağlantıları için, Microsoft Entra yönetici hesabı yerel olarak Visual Studio'da veya Azure CLI'da oturum açabileceğiniz bir hesap olmalıdır. Mantıksal sunucunuzun Microsoft Entra Id sayfasında sunucunuzda Microsoft Entra kimlik doğrulamasının etkinleştirilip etkinleştirilmediğini doğrulayabilirsiniz.

    Microsoft Entra kimlik doğrulamasını etkinleştirmeyi gösteren ekran görüntüsü.

  3. Kişisel bir Azure hesabı kullanıyorsanız hesabınızı sunucu yöneticisi olarak atamak için Microsoft Entra kurulumunu yaptığınızdan ve Azure SQL Veritabanı için yapılandırdığınızdan emin olun. Şirket hesabı kullanıyorsanız, Microsoft Entra Id büyük olasılıkla sizin için zaten yapılandırılmış olacaktır.

Proje oluşturma

Visual Studio Code kullanarak yeni bir Python projesi oluşturun.

  1. Visual Studio Code'u açın, projeniz için yeni bir klasör oluşturun ve bu dizine geçin.

    mkdir python-sql-azure
    cd python-sql-azure
    
  2. Uygulama için bir sanal ortam oluşturun.

    py -m venv .venv
    .venv\scripts\activate
    
  3. adlı app.pyyeni bir Python dosyası oluşturun.

mssql-python sürücüsünü yükleme

Python kullanarak Azure SQL Veritabanı bağlanmak için sürücüyü yükleyinmssql-python. Bu sürücü, El ile belirteç işleme gereksinimini ortadan kaldırarak Microsoft Entra kimlik doğrulaması için yerleşik desteğe sahiptir. Bu hızlı başlangıçta, api oluşturmak ve çalıştırmak için , fastapive uvicorn paketlerini de yüklersinizpydantic.

Uyarı

macOS ve Linux'ta, yüklemeden mssql-pythonönce sistem bağımlılıkları gereklidir. Platforma özgü yönergeler için bkz. mssql-python paketini yükleme .

  1. Aşağıdaki satırlarla bir requirements.txt dosyası oluşturun:

    mssql-python
    fastapi
    uvicorn[standard]
    pydantic
    python-dotenv
    
  2. Gereksinimleri yükleyin.

    pip install -r requirements.txt
    

Yerel bağlantı dizesi yapılandırma

Yerel geliştirme için, bağlantı dizenizi depolamak için proje klasörünüzde bir .env dosya oluşturun. Bu, kimlik bilgilerini kodunuzdan ve kaynak denetiminizden uzak tutar.

  1. Proje klasöründe adlı .envyeni bir dosya oluşturun.

  2. Değişkenini AZURE_SQL_CONNECTIONSTRING bağlantı dizenizle ekleyin. <database-server-name> ve <database-name> yer tutucularını kendi değerlerinizle değiştirin.

mssql-python sürücüsü, Microsoft Entra kimlik doğrulaması için yerleşik desteğe sahiptir. Authentication Kimlik doğrulama yöntemini belirtmek için parametresini kullanın.

ActiveDirectoryDefault etkileşimli oturum açmaya gerek kalmadan birden çok kaynaktan kimlik bilgilerini otomatik olarak bulur. Bu, yerel geliştirme için önerilen seçenektir.

En güvenilir yerel geliştirme deneyimi için önce Azure CLI ile oturum açın:

az login

Ardından dosyanızda .env şu bağlantı dizesi biçimini kullanın:

AZURE_SQL_CONNECTIONSTRING=Server=<database-server-name>.database.windows.net;Database=<database-name>;Authentication=ActiveDirectoryDefault;Encrypt=yes;TrustServerCertificate=no;

ActiveDirectoryDefault kimlik bilgilerini aşağıdaki sırayla değerlendirir:

  1. Ortam değişkenleri (hizmet temsilcisi kimlik bilgileri için)
  2. Yönetilen kimlik (Azure'da çalışırken)
  3. Azure CLI (kaynak az login)
  4. Visual Studio (yalnızca Windows)
  5. Azure PowerShell (kimden Connect-AzAccount)

İpucu

Üretim uygulamaları için, kimlik bilgisi bulma gecikme süresini önlemek için senaryonuza özgü kimlik doğrulama yöntemini kullanın:

  • Azure App Service/İşlevler: ActiveDirectoryMSI (yönetilen kimlik) kullanın
  • Etkileşimli kullanıcı oturumu açma: Kullan ActiveDirectoryInteractive
  • Hizmet sorumlusu: Kullan ActiveDirectoryServicePrincipal

azure portalından bağlantı dizesi oluşturmak için ayrıntıları alabilirsiniz:

  1. Azure SQL Server'a gidin, veritabanı adınızı bulmak için SQL veritabanları sayfasını seçin ve veritabanını seçin.

  2. Veritabanında, sunucu adını almak için Genel Bakış sayfasına gidin.

Azure SQL Veritabanı bağlanmak için kod ekleme

Proje klasöründe bir app.py dosyası oluşturun ve örnek kodu ekleyin. Bu kod şu şekilde bir API oluşturur:

  • .env kullanarak bir python-dotenv dosyasından yapılandırmayı yükler.
  • Ortam değişkeninden bir Azure SQL Veritabanı bağlantı dizesi alır.
  • Başlatma sırasında veritabanında bir Persons tablo oluşturur (yalnızca test senaryoları için).
  • Veritabanındaki tüm Person kayıtları almak için bir işlev tanımlar.
  • Veritabanından bir Person kayıt almak için bir işlev tanımlar.
  • Veritabanına yeni Person kayıtlar eklemek için bir işlev tanımlar.
from os import getenv
from typing import Union
from dotenv import load_dotenv
from fastapi import FastAPI
from pydantic import BaseModel
from mssql_python import connect

load_dotenv()

class Person(BaseModel):
    first_name: str
    last_name: Union[str, None] = None

connection_string = getenv("AZURE_SQL_CONNECTIONSTRING")

app = FastAPI()

@app.get("/")
def root():
    print("Root of Person API")
    try:
        conn = get_conn()
        cursor = conn.cursor()

        # Table should be created ahead of time in production app.
        cursor.execute("""
            IF NOT EXISTS (SELECT * FROM sys.tables WHERE name = 'Persons')
            CREATE TABLE Persons (
                ID int NOT NULL PRIMARY KEY IDENTITY,
                FirstName varchar(255),
                LastName varchar(255)
            );
        """)

        conn.commit()
        conn.close()
    except Exception as e:
        # Table might already exist
        print(e)
    return "Person API"

@app.get("/all")
def get_persons():
    rows = []
    with get_conn() as conn:
        cursor = conn.cursor()
        cursor.execute("SELECT * FROM Persons")

        for row in cursor.fetchall():
            print(row.FirstName, row.LastName)
            rows.append(f"{row.ID}, {row.FirstName}, {row.LastName}")
    return rows

@app.get("/person/{person_id}")
def get_person(person_id: int):
    with get_conn() as conn:
        cursor = conn.cursor()
        cursor.execute("SELECT * FROM Persons WHERE ID = ?", (person_id,))

        row = cursor.fetchone()
        return f"{row.ID}, {row.FirstName}, {row.LastName}"

@app.post("/person")
def create_person(item: Person):
    with get_conn() as conn:
        cursor = conn.cursor()
        cursor.execute("INSERT INTO Persons (FirstName, LastName) VALUES (?, ?)",
                       (item.first_name, item.last_name))
        conn.commit()

    return item

def get_conn():
    """Connect using mssql-python with built-in Microsoft Entra authentication."""
    conn = connect(connection_string)
    conn.setautocommit(True)
    return conn

Uyarı

Örnek kod, üretim kodunda kullanılmaması gereken ham SQL deyimlerini gösterir. Bunun yerine, veritabanınıza erişmek için daha güvenli bir nesne katmanı oluşturan SqlAlchemy gibi bir Nesne İlişkisel Eşleyici (ORM) paketi kullanın.

Uygulamayı yerel olarak çalıştırma ve test edin

Uygulama yerel olarak test edilmeye hazırdır.

  1. app.py Dosyayı Visual Studio Code'da çalıştırın.

    uvicorn app:app --reload
    
  2. Uygulamanın http://127.0.0.1:8000/docsSwagger kullanıcı arabirimi sayfasında POST yöntemini genişletin ve Deneyin'i seçin.

    Ayrıca API için oluşturulmuş başka bir tür belgeyi görmek için /redoc deneyebilirsiniz.

  3. Örnek JSON'ı ad ve soyadı değerlerini içerecek şekilde değiştirin. Veritabanına yeni bir kayıt eklemek için Yürüt'e tıklayın. API başarılı bir yanıt döndürür.

  4. GET Swagger kullanıcı arabirimi sayfasında yöntemini genişletin ve Deneyin'i seçin. Yürüt'e tıklayın ve yeni oluşturduğunuz kişi döndürülür.

Azure App Service’e dağıtma

Uygulama Azure'a dağıtılmaya hazırdır.

  1. Azure Uygulama Hizmeti'nde gunicorn'un uvicorn çalıştırabilmesi için bir start.sh dosyası oluşturun. start.sh bir satırı vardır:

    gunicorn -w 4 -k uvicorn.workers.UvicornWorker app:app
    
  2. Kodu App Service'e dağıtmak için az webapp up komutunu kullanın. (Kaynağı oluşturmadan komutun ne yaptığını görmek için seçeneğini -dryrun kullanabilirsiniz.)

    az webapp up \
        --resource-group <resource-group-name> \
        --name <web-app-name>         
    
  3. App Service'i az webapp config set komutunu kullanarak start.sh dosyasını kullanacak şekilde yapılandırın.

    az webapp config set \
        --resource-group <resource-group-name> \
        --name <web-app-name> \
        --startup-file start.sh
    
  4. App Service için sistem tarafından atanan bir yönetilen kimliği etkinleştirmek amacıyla az webapp identity assign komutunu kullanın.

    az webapp identity assign \
        --resource-group <resource-group-name> \
        --name <web-app-name>
    

    Bu hızlı başlangıç kılavuzunda, gösterim amacıyla sistem tarafından atanan yönetilen bir kimlik kullanılır. Kullanıcı tarafından atanan yönetilen kimlik, daha geniş bir senaryo aralığında daha verimlidir. Daha fazla bilgi için Yönetilen kimlik en iyi uygulama önerileri'ne bakın. mssql-python ile kullanıcı tarafından atanan yönetilen kimlik kullanma örneği için bkz. Azure SQL Veritabanı ile parolasız bağlantılar kullanmak için Python uygulamasını geçirme.

App Service'i Azure SQL Veritabanı'a bağlama

Veritabanını yapılandırma bölümünde, Azure SQL veritabanı sunucusu için ağ ve Microsoft Entra kimlik doğrulamasını yapılandırmıştınız. Bu bölümde veritabanı yapılandırmasını tamamlayacak ve App Service'i veritabanı sunucusuna erişmek için bir bağlantı dizesi yapılandıracaksınız.

Bu komutları çalıştırmak için SQL Server Management Studio (SSMS) veMSSQL uzantısıyla Visual Studio Code dahil olmak üzere Azure SQL Veritabanı'na bağlanabilen herhangi bir aracı veya IDE'yi kullanabilirsiniz. Hızlı Başlangıç: Azure SQL Veritabanı'nı sorgulamak için Azure portalı sorgu düzenleyicisini kullanma başlığı altında açıklandığı gibi Azure portalını da kullanabilirsiniz.

  1. Parolasız erişim için kullanıcı ve rol oluşturmak için SQL komutlarıyla Azure SQL Veritabanı bir kullanıcı ekleyin.

    CREATE USER [<web-app-name>] FROM EXTERNAL PROVIDER
    ALTER ROLE db_datareader ADD MEMBER [<web-app-name>]
    ALTER ROLE db_datawriter ADD MEMBER [<web-app-name>]
    

    Daha fazla bilgi için bkz. Bağımsız Veritabanı Kullanıcıları - Veritabanınızı Taşınabilir Hale Getirme. Aynı ilkeyi gösteren ancak Azure VM'ye uygulanan bir örnek için bkz . Öğretici: Azure SQL'e erişmek için Windows VM sistem tarafından atanan yönetilen kimliği kullanma. Atanan roller hakkında daha fazla bilgi için bkz . Sabit veritabanı Rolleri.

    Uygulama Hizmeti tarafından atanan yönetilen kimliği devre dışı bırakır ve tekrar etkinleştirirseniz, kullanıcıyı silin ve yeniden oluşturun. DROP USER [<web-app-name>] çalıştırın ve CREATE ile ALTER komutlarını yeniden çalıştırın. Kullanıcıları görmek için kullanın SELECT * FROM sys.database_principals.

  2. Bağlantı dizesi için bir uygulama ayarı eklemek amacıyla az webapp config appsettings set komutunu kullanın.

    az webapp config appsettings set \
        --resource-group <resource-group-name> \
        --name <web-app-name> \
        --settings AZURE_SQL_CONNECTIONSTRING="<connection-string>"
    

    Dağıtılan uygulama için bağlantı dizesi şuna benzemelidir:

    Server=<database-server-name>.database.windows.net;Database=<database-name>;Authentication=ActiveDirectoryMSI;Encrypt=yes;TrustServerCertificate=no;
    

    <database-server-name> ve <database-name>'i kendi değerlerinizle doldurun.

    Parolasız bağlantı dizesi kullanıcı adı veya parola içermez. Bunun yerine, uygulama Azure'da çalıştırıldığında mssql-python sürücüsü, App Service'in yönetilen kimliğini kullanarak otomatik olarak kimlik doğrulaması yapmak için kimlik doğrulama modunu kullanır ActiveDirectoryMSI .

Dağıtılan uygulamayı test edin

Azure SQL Veritabanı bağlantısının çalışıp çalışmadığını test etmek için uygulamanın URL'sine göz atın. Uygulamanızın URL'sini App Service'e genel bakış sayfasında bulabilirsiniz.

https://<web-app-name>.azurewebsites.net

Swagger kullanıcı arabirimini görmek ve API yöntemlerini test etmek için URL'ye ekleyin /docs .

Tebrikler! Uygulamanız artık hem yerel hem de barındırılan ortamlardaki Azure SQL Veritabanı bağlı.