Python ve pyodbc sürücüsünü kullanarak Azure SQL Veritabanı bağlanma ve sorgulama
Şunlar için geçerlidir: Azure SQL Veritabanı
Bu hızlı başlangıçta, bir uygulamanın Azure SQL Veritabanı'daki bir veritabanına nasıl bağlandığı ve Python ve Python SQL Sürücüsü - pyodbc kullanarak sorgular nasıl gerçekleştirebileceğiniz açıklanır. Bu hızlı başlangıç, veritabanına bağlanmak için önerilen parolasız yaklaşımı izler. 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ı. Veritabanı oluştur hızlı başlangıcını kullanarak bir tane oluşturabilirsiniz.
- Azure CLI'nın en son sürümü.
- Python uzantısıyla Visual Studio Code.
- Python 3.8 veya üzeri. Linux istemci makinesi kullanıyorsanız bkz . ODBC sürücüsünü yükleme.
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 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:
Sunucunuzun Ağ sayfasına gidin.
Ek yapılandırma seçeneklerini göstermek için Seçili ağlar radyo düğmesini değiştirin.
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 ve projeniz için yeni bir klasör oluşturun ve dizini bu klasöre değiştirin.
mkdir python-sql-azure cd python-sql-azure
Uygulama için bir sanal ortam oluşturun.
py -m venv .venv .venv\scripts\activate
adlı
app.py
yeni bir Python dosyası oluşturun.
pyodbc sürücüsünü yükleme
Python kullanarak Azure SQL Veritabanı bağlanmak için sürücüyü yükleyinpyodbc
. Bu paket veritabanlarına bağlanmak, komutları yürütmek ve sonuçları almak için bir veri sağlayıcısı işlevi görür. Bu hızlı başlangıçta, api oluşturmak ve çalıştırmak için , uvicorn
ve pydantic
paketlerini de yüklersinizflask
.
Sürücüyü tüm işletim sistemlerine pyodbc
yüklemeye ilişkin ayrıntılar ve belirli yönergeler için bkz . Pyodbc Python geliştirmesi için geliştirme ortamını yapılandırma.
Aşağıdaki satırlarla bir requirements.txt dosyası oluşturun:
pyodbc fastapi uvicorn[standard] pydantic azure-identity
Gereksinimleri yükleyin.
pip install -r requirements.txt
Yerel bağlantı dizesi yapılandırma
Yerel geliştirme ve Azure SQL Veritabanı bağlanmak için aşağıdaki AZURE_SQL_CONNECTIONSTRING
ortam değişkenini ekleyin. <database-server-name>
ve <database-name>
yer tutucularını kendi değerlerinizle değiştirin. Bash kabuğu için örnek ortam değişkenleri gösterilir.
Etkileşimli kimlik doğrulaması, yerel olarak çalışırken parolasız bir seçenek sağlar.
Microsoft Entra Interactive Authentication, Windows'ta bağlantı kurmak için Microsoft Entra çok faktörlü kimlik doğrulama teknolojisini kullanabilir. Bu modda, oturum açma kimliği sağlanarak bir Azure Kimlik Doğrulaması iletişim kutusu tetiklenerek kullanıcının bağlantıyı tamamlamak için parolayı girmesine izin verilir.
export AZURE_SQL_CONNECTIONSTRING='Driver={ODBC Driver 18 for SQL Server};Server=tcp:<database-server-name>.database.windows.net,1433;Database=<database-name>;Encrypt=yes;TrustServerCertificate=no;Connection Timeout=30'
Daha fazla bilgi için bkz . ODBC Sürücüsü ile Microsoft Entra Id kullanma. Bu seçeneği kullanırsanız sizden kimlik bilgilerini isteyen pencereyi arayın.
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.
Bağlantı dizesi bilgileri almak için veritabanında Bağlantı dizeleri sayfasına gidin. ODBC sekmesinin altına bakın.
Not
Azure Arc'ı yüklediyseniz ve Azure aboneliğinizle ilişkilendirdiyseniz, App Service'e dağıtılan uygulama için gösterilen yönetilen kimlik yaklaşımını da kullanabilirsiniz.
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:
- 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.
import os
import pyodbc, struct
from azure import identity
from typing import Union
from fastapi import FastAPI
from pydantic import BaseModel
class Person(BaseModel):
first_name: str
last_name: Union[str, None] = None
connection_string = os.environ["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("""
CREATE TABLE Persons (
ID int NOT NULL PRIMARY KEY IDENTITY,
FirstName varchar(255),
LastName varchar(255)
);
""")
conn.commit()
except Exception as e:
# Table may 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(f"INSERT INTO Persons (FirstName, LastName) VALUES (?, ?)", item.first_name, item.last_name)
conn.commit()
return item
def get_conn():
credential = identity.DefaultAzureCredential(exclude_interactive_browser_credential=False)
token_bytes = credential.get_token("https://database.windows.net/.default").token.encode("UTF-16-LE")
token_struct = struct.pack(f'<I{len(token_bytes)}s', len(token_bytes), token_bytes)
SQL_COPT_SS_ACCESS_TOKEN = 1256 # This connection option is defined by microsoft in msodbcsql.h
conn = pyodbc.connect(connection_string, attrs_before={SQL_COPT_SS_ACCESS_TOKEN: token_struct})
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.py
Dosyayı Visual Studio Code'da çalıştırın.uvicorn app:app --reload
Uygulamanın http://127.0.0.1:8000/docsSwagger kullanıcı arabirimi sayfasında POST yöntemini genişletin ve Deneyin'i seçin.
API için oluşturulan başka bir belge biçimini görmek için try /redoc komutunu da kullanabilirsiniz.
Ö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.
Swagger kullanıcı arabirimi sayfasında GET 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 Uygulaması Hizmeti'nde gunicorn'un vicorn ç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
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>
App Service'i start.sh dosyasını kullanacak şekilde yapılandırmak için az webapp config set komutunu kullanın.
az webapp config set \ --resource-group <resource-group-name> \ --name <web-app-name> \ --startup-file start.sh
App Service için sistem tarafından atanan yönetilen kimliği etkinleştirmek için 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ıçta, gösterim için sistem tarafından atanan yönetilen 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 bkz . Yönetilen kimlik en iyi uygulama önerileri. Pyodbc 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), Azure Data Studio ve SQL Server mssql uzantısıyla Visual Studio Code dahil olmak üzere Azure SQL Veritabanı bağlanabilen herhangi bir aracı veya IDE'yi kullanabilirsiniz. Ayrıca, Hızlı Başlangıç: Azure portal sorgu düzenleyicisini kullanarak Azure SQL Veritabanı sorgulama bölümünde 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.
App Service sistem tarafından atanan yönetilen kimliği devre dışı bırakır ve etkinleştirirseniz kullanıcıyı bırakın ve yeniden oluşturun. ve komutlarını
CREATE
çalıştırınDROP USER [<web-app-name>]
veALTER
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 için 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:
Driver={ODBC Driver 18 for SQL Server};Server=tcp:<database-server-name>.database.windows.net,1433;Database=<database-name>;Encrypt=yes;TrustServerCertificate=no;Connection Timeout=30
ve
<database-name>
değerlerini<dabaser-server-name>
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, kod ile
pyodbc
kullanılacak bir belirteç almak için Azure Kimlik kitaplığından kullanırDefaultAzureCredential
.
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 /docs ekleyin.
Tebrikler! Uygulamanız artık hem yerel hem de barındırılan ortamlardaki Azure SQL Veritabanı bağlı.
İlgili içerik
- Azure SQL Veritabanı ile parolasız bağlantılar kullanmak için Python uygulamasını geçirme - Kullanıcı tarafından atanan yönetilen kimliği gösterir.
- Azure hizmetleri için parolasız bağlantılar
- Yönetilen kimlikler için en iyi yöntem önerileri