Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Ş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
- Bir Azure aboneliği.
- Microsoft Entra kimlik doğrulaması ile yapılandırılmış bir Azure SQL veritabanı. Hızlı Başlangıç: Tek veritabanı oluşturma - Azure SQL Veritabanı'nı kullanarak bir veritabanı oluşturabilirsiniz. Alternatif olarak, Microsoft Fabric'te bir SQL veritabanı kullanabilirsiniz.
- Visual Studio Code üzerinde Python uzantısı.
- Python 3.10 veya üzeri.
- Parolasız kimlik doğrulaması için Azure CLI (Windows, macOS ve Linux üzerinde çalışır).
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:
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:
Azure portalında, kaynak menüsünden Güvenlik altında Ağ'ı seçin.
Ek yapılandırma seçeneklerini göstermek için Seçili ağlar düğmesini seçin.
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.
Azure hizmetlerinin ve kaynaklarının bu sunucuya erişmesine izin ver onay kutusunun seçili olduğundan emin olun.
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:
- Azure SQL Veritabanı güvenlik duvarı kurallarını yapılandırın.
- Özel uç noktalarla bir sanal ağ yapılandırın.
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.
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.
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-azureUygulama için bir sanal ortam oluşturun.
py -m venv .venv .venv\scripts\activateadlı
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 .
Aşağıdaki satırlarla bir requirements.txt dosyası oluşturun:
mssql-python fastapi uvicorn[standard] pydantic python-dotenvGereksinimleri 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.
Proje klasöründe adlı
.envyeni bir dosya oluşturun.Değişkenini
AZURE_SQL_CONNECTIONSTRINGbağ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 (Önerilen)
- Etkileşimli Kimlik Doğrulaması
- SQL Kimlik Doğrulaması
- Fabric SQL Veritabanı
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:
- Ortam değişkenleri (hizmet temsilcisi kimlik bilgileri için)
- Yönetilen kimlik (Azure'da çalışırken)
-
Azure CLI (kaynak
az login) - Visual Studio (yalnızca Windows)
-
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:
Azure SQL Server'a gidin, veritabanı adınızı bulmak için SQL veritabanları sayfasını seçin ve veritabanını seçin.
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:
-
.envkullanarak birpython-dotenvdosyası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
Personstablo oluşturur (yalnızca test senaryoları için). - Veritabanındaki tüm
Personkayıtları almak için bir işlev tanımlar. - Veritabanından bir
Personkayıt almak için bir işlev tanımlar. - Veritabanına yeni
Personkayı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.
app.pyDosyayı Visual Studio Code'da çalıştırın.uvicorn app:app --reloadUygulamanı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
/redocdeneyebilirsiniz.Ö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.
GETSwagger 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.
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:appKodu 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
-dryrunkullanabilirsiniz.)az webapp up \ --resource-group <resource-group-name> \ --name <web-app-name>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.shApp 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.
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 veCREATEileALTERkomutlarını yeniden çalıştırın. Kullanıcıları görmek için kullanınSELECT * FROM sys.database_principals.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ı.