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.
Bu makale, Django DATABASES yapılandırmanızda bulunan OPTIONS sözlük ayarlarını açıklar. Bu ayarlar, mssql-django öğesinin ODBC sürücüsü aracılığıyla SQL Server’a nasıl bağlanacağını denetler.
ODBC sürücüsü seçimi
mssql-django 1.7 sürümünden itibaren, arka uç varsayılan olarak SQL Server için ODBC Driver 18 kullanır. ODBC Sürücüsü 18 yüklü değilse arka uç otomatik olarak ODBC Sürücüsü 17'ye geri döner.
Note
ODBC Sürücüsü 18 varsayılan olarak etkinleştirir Encrypt=yes ve sunucu sertifikasını doğrular. Sürücü 17 ile çalışan bağlantılar SSL/TLS güven hatasıyla başarısız olabilir. Hatayı çözmek için:
- Şirket içi SQL Server için, istemcilerinizin zaten güvendiği bir sertifika yetkilisinden bir sunucu sertifikası yükleyin veya mevcut sunucu sertifikasını her istemci güven deposuna aktarın. Yönergeler için bkz.: Bağlantıları şifrelemek için SQL Server Veritabanı Altyapısı'nı yapılandırın.
- IP adresiyle veya sertifikanın öznesi ya da özne alternatif adıyla (SAN) eşleşmeyen bir takma adla bağlanırsanız,
HostNameInCertificate=<name-from-certificate>öğesiniextra_paramsöğesine ekleyin.
Otomatik olarak imzalanan bir sertifikaya karşı yerel geliştirme için TrustServerCertificate bölümüne bakın.
Sürücüyü açıkça belirtebilirsiniz:
DATABASES = {
"default": {
"ENGINE": "mssql",
"NAME": "<your-database>",
"USER": "<your-username>",
"PASSWORD": "<your-password>",
"HOST": "<your-server>",
"PORT": "1433",
"OPTIONS": {
"driver": "ODBC Driver 17 for SQL Server",
},
},
}
Linux'ta, sürücü kitaplığının tam yolunu da belirtebilirsiniz:
DATABASES = {
"default": {
"ENGINE": "mssql",
"NAME": "<your-database>",
"USER": "<your-username>",
"PASSWORD": "<your-password>",
"HOST": "<your-server>",
"PORT": "1433",
"OPTIONS": {
"driver": "/opt/microsoft/msodbcsql18/lib64/libmsodbcsql-18.0.so.1.1",
},
},
}
DSN ve HOST karşılaştırması
HOST adı veya adlandırılmış bir DSN’yi (Veri Kaynağı Adı) kullanarak bağlanabilirsiniz.
HOST ile bağlanma
Yapılandırmaların çoğu ayarı doğrudan kullanır HOST :
DATABASES = {
"default": {
"ENGINE": "mssql",
"NAME": "<your-database>",
"USER": "<your-username>",
"PASSWORD": "<your-password>",
"HOST": "<your-server>",
"PORT": "1433",
"OPTIONS": {
"driver": "ODBC Driver 18 for SQL Server",
},
},
}
DSN ile bağlanma
ODBC veri kaynaklarınızda yapılandırılmış adlandırılmış bir DSN kullanın:
DATABASES = {
"default": {
"ENGINE": "mssql",
"NAME": "<your-database>",
"USER": "<your-username>",
"PASSWORD": "<your-password>",
"OPTIONS": {
"dsn": "MyDataSourceName",
},
},
}
FreeTDS desteği
FreeTDS'yi ODBC sürücüsü olarak kullanmak için host_is_server değerini True olarak ayarlayın. Bu, arka ucun freetds.conf içinde bir veri sunucusu adı aramak yerine doğrudan HOST ve PORT kullanmasını söyler:
DATABASES = {
"default": {
"ENGINE": "mssql",
"NAME": "<your-database>",
"USER": "<your-username>",
"PASSWORD": "<your-password>",
"HOST": "<your-server>",
"PORT": "1433",
"OPTIONS": {
"driver": "FreeTDS",
"host_is_server": True,
},
},
}
FreeTDS ile DSN içermeyen bağlantılar hakkında daha fazla bilgi için bkz. FreeTDS kullanıcı kılavuzu.
Ek ODBC parametreleri
Ek ODBC bağlantı dizesi parametrelerini geçirmek için extra_params kullanın. Değer, bağlantı dizesine eklenen noktalı virgülle ayrılmış bir dizedir:
DATABASES = {
"default": {
"ENGINE": "mssql",
"NAME": "<your-database>",
"USER": "<your-username>",
"PASSWORD": "<your-password>",
"HOST": "<your-server>.database.windows.net",
"PORT": "1433",
"OPTIONS": {
"driver": "ODBC Driver 18 for SQL Server",
"extra_params": "TrustServerCertificate=yes;ApplicationIntent=ReadOnly",
},
},
}
Bu ayar Microsoft Entra kimlik doğrulama anahtar sözcükleri için de kullanılır.
Caution
TrustServerCertificate=yes yalnızca kendinden imzalı sertifikalarla yerel geliştirme için kullanın. Üretimde kullanmayın. Sertifika zinciri doğrulamasını devre dışı bırakır ve ortadaki saldırgan riski artırır. Sunucuya güvenilir bir sertifika yükleyin ve ile TrustServerCertificate=nobağlanın.
Bağlantı zaman aşımları ve yeniden denemeler
Zaman aşımı ve yeniden deneme ayarlarıyla bağlantı dayanıklılığını yapılandırın:
| Option | Varsayılan | Description |
|---|---|---|
connection_timeout |
0 (devre dışı) |
Bir bağlantı için beklenecek en fazla saniye sayısı. |
connection_retries |
5 |
Bağlantı hatasıyla ilgili yeniden deneme denemelerinin sayısı. |
connection_retry_backoff_time |
5 |
Yeniden deneme girişimleri arasında beklenecek saniye sayısı. |
query_timeout |
0 (devre dışı) |
Sorgu tamamlanmasını beklemek için en fazla saniye. |
Example:
DATABASES = {
"default": {
"ENGINE": "mssql",
"NAME": "<your-database>",
"USER": "<your-username>",
"PASSWORD": "<your-password>",
"HOST": "<your-server>",
"PORT": "1433",
"OPTIONS": {
"driver": "ODBC Driver 18 for SQL Server",
"connection_timeout": 30,
"connection_retries": 3,
"connection_retry_backoff_time": 10,
"query_timeout": 120,
},
},
}
Collation
Metin alanı aramaları için özel harmanlama ayarlayın:
DATABASES = {
"default": {
"ENGINE": "mssql",
"NAME": "<your-database>",
"USER": "<your-username>",
"PASSWORD": "<your-password>",
"HOST": "<your-server>",
"PORT": "1433",
"OPTIONS": {
"driver": "ODBC Driver 18 for SQL Server",
"collation": "Chinese_PRC_CI_AS",
},
},
}
Birden çok veritabanı bağlantısı
Django aynı anda birden çok veritabanına bağlanmayı destekler. Bu, okuma amaçlı çoğaltmalar, veritabanları arası sorgular veya iş yüklerini yalıtım düzeyine göre ayırmak için kullanışlıdır.
Birden çok veritabanını yapılandırma
Her bağlantıyı şu ayarda DATABASES tanımlayın:
DATABASES = {
"default": {
"ENGINE": "mssql",
"NAME": "app_db",
"HOST": "<your-primary-server>",
"PORT": "1433",
"OPTIONS": {
"driver": "ODBC Driver 18 for SQL Server",
},
},
"readonly": {
"ENGINE": "mssql",
"NAME": "app_db",
"HOST": "<your-readonly-replica>",
"PORT": "1433",
"OPTIONS": {
"driver": "ODBC Driver 18 for SQL Server",
"extra_params": "Encrypt=yes;ApplicationIntent=ReadOnly",
},
},
"analytics": {
"ENGINE": "mssql",
"NAME": "analytics_db",
"HOST": "<your-analytics-server>",
"PORT": "1433",
"OPTIONS": {
"driver": "ODBC Driver 18 for SQL Server",
"isolation_level": "READ UNCOMMITTED",
},
},
}
Caution
READ UNCOMMITTED kirli okumalara izin verir. Bu yalıtım düzeyini yalnızca mutlak doğruluğun gerekli olmadığı raporlama veya analiz sorguları için kullanın. Daha fazla bilgi için bkz. İşlem yönetimi.
Sorguları veritabanı yönlendiricisi ile yönlendirme
Okuma ve yazma işlemlerini uygun bağlantıya yönlendirmek için bir veritabanı yönlendiricisi oluşturun:
class ReadReplicaRouter:
"""Route read queries to the readonly replica, writes to the primary."""
def db_for_read(self, model, **hints):
return "readonly"
def db_for_write(self, model, **hints):
return "default"
def allow_relation(self, obj1, obj2, **hints):
return True
def allow_migrate(self, db, app_label, model_name=None, **hints):
return db == "default"
Yönlendiriciyi settings.py içine kaydedin:
DATABASE_ROUTERS = ["myproject.routers.ReadReplicaRouter"]
Yönlendirici sınıfını myproject/routers.py gibi bir dosyaya kaydedin.
Belirli bir veritabanını doğrudan sorgulama
Belirli bir veritabanı takma adını sorgulamak için using() yöntemini kullanın:
# Explicit read from analytics database
reports = AnalyticsReport.objects.using("analytics").filter(date__gte="2025-01-01")
# Write to default
Product.objects.create(name="Widget", price=9.99)
Bağlantı başına veritabanlarındaki yalıtım düzeyleri hakkında daha fazla bilgi için bkz. Engellemeden verileri okuma.