Notatka
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Użyj tego artykułu, aby zdiagnozować problemy z instalacją, połączeniem, kontenerem i ciągłą integracją (CI) sterownika mssql-python .
Problemy z instalacją
Instalacja pip kończy się niepowodzeniem lub pakiet jest kompilowany ze źródeł
Objawy:
error: Microsoft Visual C++ 14.0 or greater is required
ERROR: Failed building wheel for mssql-python
Możliwe przyczyny i rozwiązania:
Brak gotowego koła na twoją platformę
- Sprawdź, czy masz obsługiwaną wersję Python (wersje 3.10 i nowsze) i platformę. Zobacz cykl życia pomocy technicznej, aby sprawdzić macierz zgodności.
- Ulepsz pip przed instalacją za pomocą .
pip install --upgrade pip - W przypadku powtarzalnych środowisk zespołowych używaj zablokowanego przepływu pracy w Powtarzalnych wdrożeniach lub wzorców kontenerowych w Kontenerach i rozwoju lokalnym, aby ograniczyć rozbieżności konfiguracji między lokalnymi maszynami.
Środowisko wirtualne nieaktywowane
- Najpierw aktywuj swoje środowisko wirtualne. Instalacja w systemowym Pythonie może powodować błędy uprawnień lub konflikty.
python -m venv .venv .venv\Scripts\activate pip install mssql-python
-
Brakujące biblioteki systemowe Linuksa
- Sterownik wymaga kilku bibliotek systemowych na Linuksie. Zobacz Zależności specyficzne dla platformy dla pakietów do instalacji.
Konfliktowe instalacje sterowników
Objawy:
Po zainstalowaniu mssql-python i pyodbc w tym samym środowisku występują błędy importu lub nieoczekiwane działanie.
Rozwiązanie:
mssql-python i pyodbc mogą współistnieć. Jeśli napotkasz konflikty, stwórz czyste środowisko wirtualne.
python -m venv .venv --clear
.venv\Scripts\activate
pip install mssql-python
Problemy z połączeniem
Nie można połączyć się z serwerem
Objawy:
OperationalError: [08001] (0) Client unable to establish connection
Możliwe przyczyny i rozwiązania:
Serwer niedostępny
- Sprawdź, czy nazwa serwera i port są poprawne.
- Sprawdź łączność sieciową za pomocą
ping <server>lubtelnet <server> 1433. - Upewnij się, że zapora sieciowa pozwala na połączenia wychodzące na porcie 1433.
SQL Server nie działa
- Sprawdź, czy usługa SQL Server została uruchomiona.
- Dla nazwanych instancji sprawdź, czy usługa SQL Server Browser jest uruchomiona.
Azure SQL firewall rules
- Dodaj adres IP klienta do reguł zapory Azure SQL w portalu Azure.
- W przypadku Azure SQL Managed Instance upewnij się, że łączysz się z dozwolonej sieci.
Testuj podstawową łączność TCP:
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}")
Logowanie nie powiodło się
Objawy:
OperationalError: [28000] (18456) Login failed for user '<user_id>'.
Możliwe przyczyny i rozwiązania:
Niedopasowanie trybów uwierzytelniania
- Dla Azure SQL Database, Azure SQL Managed Instance oraz SQL Database in Fabric preferują tryb Microsoft Entra, taki jak
Authentication=ActiveDirectoryDefault. - Jeśli celowo używasz uwierzytelniania SQL, sprawdź, czy serwer na to pozwala i czy używasz właściwego formatu logowania dla tego punktu końcowego.
- Dla Azure SQL Database, Azure SQL Managed Instance oraz SQL Database in Fabric preferują tryb Microsoft Entra, taki jak
Nieprawidłowe dane uwierzytelniające SQL
- Sprawdź identyfikator użytkownika i hasło.
- Dla Azure SQL dołącz pełne ID użytkownika:
<user_id>@<server>.
Użytkownik nie istnieje w bazie danych
- Sprawdź, czy użytkownik ma dostęp do określonej bazy danych.
- Sprawdź, czy logowanie jest przypisane do użytkownika bazy danych.
Uwierzytelnianie nie skonfigurowane
- Używaj uwierzytelniania Microsoft Entra (zalecane):
Authentication=ActiveDirectoryDefault. - Jeśli rozwiązujesz problem z lokalną instancją SQL Server, która powinna akceptować uwierzytelnianie SQL, sprawdź, czy SQL Server korzysta z uwierzytelniania w trybie mieszanym.
- Używaj uwierzytelniania Microsoft Entra (zalecane):
Przekroczenie limitu czasu połączenia
Objawy:
OperationalError: [HYT00] (0) Timeout expired
OperationalError: [HYT01] (0) Connection timeout expired
Możliwe przyczyny i rozwiązania:
Serwer reaguje wolno
- Zwiększ czas oczekiwania połączenia.
conn = mssql_python.connect(connection_string, timeout=60)Opóźnienie sieci
- Sprawdź ścieżkę sieciową do serwera.
- Rozważ krótszą ścieżkę sieciową lub wirtualną sieć prywatną (VPN).
Serwer pod dużym obciążeniem
- Staraj się łączyć w godzinach poza szczytem.
- Skontaktuj się z administratorem swojej bazy danych.
Błędy certyfikatu SSL
Objawy:
OperationalError: [08001] SSL Provider: The certificate chain was issued by an authority that is not trusted
Rozwiązania:
Preferuj zaufany certyfikat lub wzorce programowania lokalnego opisane w sekcji Kontenery i programowanie lokalne. Używaj TrustServerCertificate=yes tylko do lokalnego rozwoju na serwerze, który kontrolujesz.
Do programowania i testowania z certyfikatem z podpisem własnym:
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 to wyłącznie lokalne rozwiązanie zapasowe. Nie przenoś go do wspólnych kontenerów deweloperskich, pipeline'ów CI ani wdrożeń produkcyjnych. Więcej informacji można znaleźć w artykule Szyfrowanie i certyfikaty.
Do produkcji zainstaluj odpowiednie certyfikaty i użyj:
conn = mssql_python.connect(
"Server=<server>.database.windows.net;"
"Database=<database>;"
"Authentication=ActiveDirectoryDefault;"
"Encrypt=yes;"
"HostnameInCertificate=<server>.domain.com;"
)
Problemy z kontenerami i CI
Brakujące biblioteki systemowe na Linuksie
Objawy:
ImportError: libltdl.so.7: cannot open shared object file: No such file or directory
ImportError: libkrb5.so.3: cannot open shared object file
Rozwiązanie:
Zainstaluj wymagane pakiety systemowe dla swojej dystrybucji:
| Distribution | Zainstaluj polecenie |
|---|---|
| Ubuntu lub Debian | sudo apt-get install libltdl7 libkrb5-3 libgssapi-krb5-2 |
| Red Hat lub Fedora | sudo dnf install libtool-ltdl krb5-libs |
| Alpine | apk add libltdl krb5-libs |
Przykłady Dockerfile można znaleźć w artykule Kontener i rozwój lokalny.
Błędy SSL w systemie macOS po instalacji
Objawy:
Podczas łączenia z systemu macOS, zwłaszcza na komputerach Mac z układami Apple silicon, występują błędy związane z SSL.
Rozwiązanie:
Zainstaluj OpenSSL z Homebrew i ustaw flagi linkera:
brew install openssl
export LDFLAGS="-L/opt/homebrew/opt/openssl/lib"
export CPPFLAGS="-I/opt/homebrew/opt/openssl/include"