mssql-python ile kurulum ve bağlantı sorunlarının sorun gidermesi

Bu makaleyi sürücüyle ilgili kurulum, bağlantı, konteyner ve sürekli entegrasyon (CI) sorunlarını mssql-python teşhis etmek için kullanın.

Kurulum sorunları

pip kurulumu başarısız olur veya kaynaktan derlenir

Belirti -leri:

error: Microsoft Visual C++ 14.0 or greater is required
ERROR: Failed building wheel for mssql-python

Olası nedenler ve çözümler:

  • Platformunuz için önceden yapılmış bir tekerlek yok

    • Desteklenen bir Python sürümü (3.10 ve daha sonraki sürümler) ve platform çalıştırdığınızdan emin olun. Uyumluluk matrisi için Destek Yaşam Döngüsü bölümüne bakın.
    • Kurulumdan önce pip’i pip install --upgrade pip ile yükseltin.
    • Tekrarlanabilir ekip ortamları için, Tekrarlanabilir dağıtımlarda kilitli iş akışını veya Container ve yerel geliştirmedeki konteyner desenlerini kullanarak yerel makine kaymasını azaltabilirsiniz.
  • Sanal ortam etkinleştirilmedi

    • Önce sanal ortamınızı etkinleştirin. Sistem Python'a kurulum izin hatalarına veya çakışmalara yol açabilir.
    python -m venv .venv
    .venv\Scripts\activate
    pip install mssql-python
    

  • Eksik Linux sistem kütüphaneleri

Çelişkili sürücü kurulumları

Belirti -leri:

mssql-python ve pyodbc’i aynı ortama kurduktan sonra içe aktarma hatalarıyla veya beklenmedik davranışlarla karşılaşıyorsunuz.

Çözüm:

mssql-python ve pyodbc bir arada var olabilir. Çatışmalarla karşılaşırsanız, temiz bir sanal ortam oluşturun.

python -m venv .venv --clear
.venv\Scripts\activate
pip install mssql-python

Bağlantı sorunları

Sunucuya bağlanamıyor

Belirti -leri:

OperationalError: [08001] (0) Client unable to establish connection

Olası nedenler ve çözümler:

  • Sunucuya ulaşılamaz

    • Sunucu adı ve portun doğru olduğundan emin olun.
    • Ağ bağlantısını ping <server> veya telnet <server> 1433 ile kontrol edin.
    • Güvenlik duvarının 1433 portunda çıkış bağlantılarına izin verdiğinden emin olun.
  • SQL Server çalışmıyor

    • SQL Server servisinin açıldığını doğrulayın.
    • İsimlendirilmiş örnekler için, SQL Server Browser servisinin çalıştığını doğrulayın.
  • Azure SQL firewall rules

    • Azure portalındaki Azure SQL güvenlik duvarı kurallarına istemci IP adresinizi ekleyin.
    • Azure SQL Yönetilen Örneği için, izin verilen bir ağdan bağlandığınızdan emin olun.

Temel TCP bağlantısını test edin:

import socket

try:
    sock = socket.create_connection(("<server>.database.windows.net", 1433), timeout=5)
    print("TCP connection successful")
    sock.close()
except Exception as e:
    print(f"Cannot reach server: {e}")

Oturum açılamadı

Belirti -leri:

OperationalError: [28000] (18456) Login failed for user '<user_id>'.

Olası nedenler ve çözümler:

  • Kimlik doğrulama modu uyumsuzluğu

    • Azure SQL Veritabanı, Azure SQL Yönetilen Örneği ve Fabric'teki SQL veritabanı için Authentication=ActiveDirectoryDefault gibi bir Microsoft Entra modunu tercih edin.
    • SQL doğrulama amaçlı kullanıyorsanız, sunucunun buna izin verdiğini ve o uç nokta için doğru giriş formatını kullandığınızı kontrol edin.
  • Yanlış SQL kimlik doğrulama bilgileri

    • Kullanıcı kimliğini ve şifreyi doğrulayın.
    • Azure SQL için, tam kullanıcı kimliğini ekleyin: <user_id>@<server>.
  • Kullanıcı veritabanında yok

    • Kullanıcının belirtilen veritabanına erişimi olup olmadığını doğrulayın.
    • Giriş işleminin bir veritabanı kullanıcısına eşlenip eşlenmediğini kontrol edin.
  • Kimlik doğrulama yapılandırılmadı

    • Microsoft Entra kimlik doğrulamasını kullanın (önerilir): Authentication=ActiveDirectoryDefault.
    • SQL kimlik doğrulamasını kabul etmesi gereken yerel bir SQL Server örneğinde sorun gideriyorsanız, SQL Server'ın karma mod kimlik doğrulaması kullandığını doğrulayın.

Bağlantı zaman aşımına uğradı

Belirti -leri:

OperationalError: [HYT00] (0) Timeout expired
OperationalError: [HYT01] (0) Connection timeout expired

Olası nedenler ve çözümler:

  • Sunucu yavaş yanıt veriyor

    • Bağlantı süresini artırın.
    conn = mssql_python.connect(connection_string, timeout=60)
    
  • Ağ gecikme süresi

    • Sunucuya giden ağ yolunu kontrol edin.
    • Daha kısa bir ağ yolu veya sanal özel ağ (VPN) düşünün.
  • Sunucu ağır yük altında

    • Yoğun olmayan saatlerde bağlantı kurmaya çalışın.
    • Veritabanı yöneticinizle iletişime geçin.

SSL sertifikası hataları

Belirti -leri:

OperationalError: [08001] SSL Provider: The certificate chain was issued by an authority that is not trusted

Çözümler:

Güvenilir bir sertifikayı veya Container ile yerel geliştirme kalıplarını tercih edin. Sadece kontrol ettiğiniz bir sunucuya karşı yerel geliştirme için kullanın TrustServerCertificate=yes .

Kendi imzalı sertifika ile geliştirme ve test için:

conn = mssql_python.connect(
    "Server=<server>.database.windows.net;"
    "Database=<database>;"
    "Authentication=ActiveDirectoryDefault;"
    "Encrypt=yes;"
    "TrustServerCertificate=yes;"  # Don't use in production
)

Caution

TrustServerCertificate=yes sadece yerel bir yedek yöntemdir. Bunu paylaşılan geliştirme konteynerlerine, CI boru hatlarına veya üretim dağıtımlarına taşımayın. Daha fazla bilgi için Şifreleme ve sertifikalar bölümünü inceleyin.

Üretim için uygun sertifikaları kurun ve şunları kullanın:

conn = mssql_python.connect(
    "Server=<server>.database.windows.net;"
    "Database=<database>;"
    "Authentication=ActiveDirectoryDefault;"
    "Encrypt=yes;"
    "HostnameInCertificate=<server>.domain.com;"
)

Konteyner ve CI sorunları

Linux'ta eksik sistem kütüphaneleri

Belirti -leri:

ImportError: libltdl.so.7: cannot open shared object file: No such file or directory
ImportError: libkrb5.so.3: cannot open shared object file

Çözüm:

Dağıtımınız için gerekli sistem paketlerini kurun:

Distribution Yükle komutu
Ubuntu veya Debian sudo apt-get install libltdl7 libkrb5-3 libgssapi-krb5-2
Red Hat veya Fedora sudo dnf install libtool-ltdl krb5-libs
Alpine apk add libltdl krb5-libs

Dockerfile örnekleri için bkz. Konteyner ve yerel geliştirme.

Kurulumdan sonra macOS SSL hataları

Belirti -leri:

macOS'tan bağlanırken özellikle Apple silikonunda SSL ile ilgili hatalarla karşılaşıyorsunuz.

Çözüm:

Homebrew ile OpenSSL kur ve linker bayraklarını ayarla:

brew install openssl
export LDFLAGS="-L/opt/homebrew/opt/openssl/lib"
export CPPFLAGS="-I/opt/homebrew/opt/openssl/include"