Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
mssql-python laadt een van de twee native ODBC-providers:
| Provider | Description | Status |
|---|---|---|
msodbcsql18 |
Microsoft ODBC-stuurprogramma 18 voor SQL Server | Default |
mssql-odbc |
Rust-gebaseerde ODBC-driver | Preview, opt-in |
Het mssql-python-rs0.4.0-pakket bevat de mssql-odbc provider.
Note
Gebruik msodbcsql18 voor productieworkloads. Voordat je je aanmeldt voor de previewprovider mssql-odbc , bekijk de bekende problemen.
Availability
De driver wordt geleverd in het mssql-python-rs pakket als voorgebouwde wheels voor CPython 3.10 en latere versies:
| Platform | Architectures |
|---|---|
| Windows | x64; ARM64 op CPython 3.11 en latere versies |
| macOS | Universal2 (x86_64 en arm64), macOS 15 en latere versies |
| Linux (glibc) | x86_64 en aarch64 (manylinux_2_28 en manylinux_2_34) |
| Linux (musl) | x86_64 en aarch64 (musllinux_1_2) |
Het stuurprogramma inschakelen
Als u mssql-python installeert, wordt ook mssql-python-rs geïnstalleerd, dat het stuurprogramma mssql-odbc bevat:
python -m pip install mssql-python
Als je installeert met --no-deps of vanuit een privé-index, installeer mssql-python-rs dan expliciet ook.
Selecteer de provider voordat je de eerste verbinding opent. Gebruik een van de volgende methoden.
$env:MSSQL_PYTHON_NATIVE_PROVIDER = "mssql-odbc"
Stel de MSSQL_CONNECTION_STRING omgevingsvariabele in op de verbindingsreeks van je applicatie. Houd certificaatvalidatie ingeschakeld (Encrypt=yes;TrustServerCertificate=no). Voor meer informatie, zie Verbindingsstrings en Versleuteling en certificaten.
Voer dit voorbeeld uit met de door je gekozen provider:
import os
import mssql_python
with mssql_python.connect(os.environ["MSSQL_CONNECTION_STRING"], timeout=45) as connection:
with connection.cursor() as cursor:
cursor.execute("SELECT 1")
print(cursor.fetchone()[0])
Het voorbeeld geeft 1 weer.
De keuze van provider volgt deze regels:
-
MSSQL_PYTHON_NATIVE_PROVIDERheeft voorrang opnative_provider. Het instellen van het attribuut op een conflicterende provider geeftRuntimeWarning. - Voordat de driver laadt, zet je
native_provideropNoneom de Python-instelling te wissen. Dit wist de omgevingsvariabele niet. - Een niet-erkende zorgverlenersnaam veroorzaakt
ValueError. Het toewijzen van een ongeldige naam aannative_providergeeft meteen een fout; een ongeldige omgevingsvariabele geeft een fout wanneer je verbinding maakt. De driver valt niet terug op de standaardprovider. - De provider is vastgelegd wanneer de driver een native verbindingspoging start, zelfs als die poging mislukt. Herstart Python om van provider te wisselen. Wijzigen van
native_providernaar een andere provider genereertRuntimeWarningen heeft geen effect.
Fouten in verificatie van verbindingsstrings en ontbrekende providerpakketten komen al vóór dit punt voor. Je kunt deze fouten corrigeren en een andere provider kiezen zonder opnieuw te hoeven starten.
Bel mssql_python.get_native_provider_info() om de naam van de zorgverlener te controleren, hoe deze is geselecteerd en of de keuze vaststaat.
Om terug te keren naar msodbcsql18, verwijder MSSQL_PYTHON_NATIVE_PROVIDER en elke native_provider toewijzing uit je applicatie, start dan Python opnieuw op.
Multi-subnet failover standaardinstellingen
De Rust-provider maakt MultiSubnetFailover standaard mogelijk voor toepasbare Transmission Control Protocol (TCP)-verbindingen. Stel MultiSubnetFailover=no expliciet in om sequentiële verbindingspogingen te verzoeken. Om de deployment-brede standaard te wijzigen, stel MSSQL_RS_MULTISUBNET_FAILOVER_DEFAULT in op true of false voordat de native driver voor het eerst wordt gebruikt. Het sleutelwoord van de connection string overschrijft deze standaard.
Het numerieke SQL_COPT_SS_MULTISUBNET_FAILOVER attribuut (1248) overschrijft ook het trefwoord wanneer het wordt ingesteld vóór het verbinden.
De driver schakelt deze standaard niet in voor niet-TCP transports, databasespiegeling, benoemde instanties die SQL Server Browser-ontdekking vereisen, of lokale Windows-verbindingen die een expliciet protocol en adres weglaten. Het expliciet inschakelen van MultiSubnetFailover bij een niet-TCP-transport, databasespiegeling of SQL Server Browser-ontdekking levert een verbindingsfout op. Voor meer informatie, zie Hoge beschikbaarheid en failover.
Ondersteunde functies
De volgende functies worden ondersteund, onder voorbehoud van bekende problemen.
| Area | Notes |
|---|---|
| Levenscyclus van de verbinding | Verbinden, close(), with blokken, inlogtimeout, diagnostiek en het wijzigen van de huidige database. Instellingen voor verbindingsstrings zijn onder andere ApplicationIntent, MultiSubnetFailover, IpAddressPreference, PacketSize, KeepAlive, en ConnectRetryCount / ConnectRetryInterval (idle-verbindingsveerkracht). De natieve driver onderhandelt ook over door de server ondersteunde Domain Name System (DNS)-caching en verbeterde routering wanneer de server deze ondersteunt. |
| Authentication | SQL-authenticatie (UID / PWD); Windows-verificatie (Trusted_Connection=Yes, met behulp van Security Support Provider Interface (SSPI) op Windows of Kerberos op Linux en macOS); en Microsoft Entra ID interactief, geïntegreerd, apparaatcode, serviceprincipal, beheerde identiteit, standaardinloggegevens en toegangstoken. Microsoft Entra ID-wachtwoordauthenticatie wordt niet ondersteund. Zie Bekende problemen voor meer informatie. |
| Transportlaagbeveiliging (TLS) |
Encrypt, TrustServerCertificate, HostnameInCertificate en ServerCertificate. |
| Query uitvoeren | Directe en voorbereide uitvoering, hergebruik van voorbereide plannen, qmark parameters en de conversie die pyformatmssql-python uitvoert. |
| ODBC-escape-syntaxis | Functie, datum/tijd, outer join, wereldwijd unieke identificatie (GUID), LIKE ... {escape ...}, interval en {encrypt ...} escape-vormen. |
| opgeslagen procedures | Roep ze aan met Transact-SQL (T-SQL) of positionele {call ...} syntaxis via execute(), lees resultaatsets, en ga door met nextset(). |
| Invoerparameters | Scalaire parameters, SQL NULL, setinputsizes(), en gemengde reguliere/gestreamde parameters. |
| Lange parameters | Grote tekst-, binaire, Extensible Markup Language (XML)- en door de gebruiker gedefinieerde typen (UDT)-parameters ondersteunen data-at-execution streaming. |
executemany() |
Gebatcht met ODBC-parameterarrays. Rijen met gestreamde waarden vallen terug op rij-voor-rij-uitvoering. |
| Rij ophalen |
fetchone(), fetchmany(), fetchall(), iteratie, fetchval(), getypte conversie en grote tekst-/binaire streaming. |
| Pijl ophalen |
arrow_batch(), arrow() en arrow_reader(). Vereist pyarrow. |
| Meerdere resultaatsets |
nextset(), inclusief resultaten geproduceerd door parameterarrays. |
| Transactions | Autocommit, commit, rollback, en de read-uncommitted, read-committed, repeatable-read, serializable en snapshot isolatieniveaus. Met autocommit uitgeschakeld voert de connection context manager bij een succesvolle exit een commit uit en draait deze bij een uitzondering terug. |
| Querytime-out | Stel Connection.timeout in op seconden voordat je een cursor maakt. Wanneer een statement die time-out overschrijdt, genereert de driver OperationalError.
0 betekent geen time-out. Stel de inlogtime-out apart in met connect(timeout=...). |
| Groepsgewijze verbindingen | De ingebouwde mssql-python pool, inclusief het resetten van de verbinding vóór hergebruik. Voor authenticatie-specifieke poolisolatie, zie Identiteitsisolatie. |
| Metagegevens-API's |
tables(), columns(), primaryKeys(), foreignKeys(), statistics(), rowIdColumns(), rowVerColumns(), procedures(), en getTypeInfo(). |
| Encoding en converters | Standaard brede-tekencodering, outputconverters en collatiebewuste niet-Unicode-parameters, inclusief UTF-8 en legacy SQL sort-ID-collaties. Aangepaste smalkarakterdecodering moet overeenkomen met de codepagina van de klant. Zie Bekende problemen voor meer informatie. |
Microsoft Entra ID geïntegreerde authenticatie gebruikt het ingelogde Windows-account op Windows. Op Linux en macOS gebruikt het een Kerberos-ticket om te authenticeren bij het Active Directory Federation Services (AD FS) eindpunt van de tenant. Voor de vereisten, zie Windows Integrated authentication.
Het sluiten van een arrow_reader() stuurt SQLCancel om een lopende fetch te onderbreken.
De bijna-gelukte aanroep wacht tot de annuleringsopschoning is afgerond. Voor meer informatie, zie Apache Arrow-integratie.
Gegevenstypen
De driver retourneert xml-, json- en vectorwaarden als Python str-objecten, waarbij vector wordt weergegeven als een JavaScript Object Notation (JSON) array.
Het geeft algemene taalruntime (CLR)-typen zoals geometry, geography en hierarchyid terug als Python-objectenbytes. Voor meer informatie, zie Datatype-mappings en Bekende problemen.
Bekende problemen
Controleer deze verschillen voordat je een werklast verplaatst van msodbcsql18.
| Issue | Details | Workaround |
|---|---|---|
| Microsoft Entra ID wachtwoordauthenticatie |
Authentication=ActiveDirectoryPassword wordt niet ondersteund. Deze methode kan niet worden gebruikt voor multifactorauthenticatie (MFA). SQL-authenticatie (UID / PWD) wordt niet beïnvloed. |
Gebruik een andere Microsoft Entra ID-methode, zoals een service principal, managed identity of access token. |
attrs_before instellingen |
De Microsoft Entra ID-authenticatiemodus en applicatieintentie kunnen niet worden ingesteld als numerieke verbindingsattributen. | Gebruik de verbindingsreeks-trefwoorden Authentication en ApplicationIntent. |
| Time-out bij verbindingsbewerking |
SQL_ATTR_CONNECTION_TIMEOUT verzorgt het opschonen na annulering. Het dwingt geen time-out af bij het reseten van de pooled verbinding. Een verbindingsverzoek kan geblokkeerd blijven als de server stopt met reageren tijdens de reset. |
Er is geen pooled-reset timeout beschikbaar. Stel connect(timeout=...) voor inloggen en Connection.timeout voor statements. |
| Hosts met meerdere adressen |
msodbcsql18 schakelt standaard Transparent Network IP Resolution (TNIR) in; mssql-odbc ondersteunt het niet.
mssql-python wijst het TransparentNetworkIPResolution-trefwoord in de verbindingsreeks af bij een van beide providers. |
Gebruik MultiSubnetFailover=yes voor listeners van beschikbaarheidsgroepen en andere multi-adreshosts. Voor standaardinstellingen, zie Multi-subnet failover defaults. |
| Gegevensclassificatie | Metadata voor gevoeligheidsclassificatie is niet beschikbaar en SQL_COPT_SS_DATACLASSIFICATION_VERSION (1400) wordt niet ondersteund. |
Query sys.sensitivity_classifications. |
fork() na het verbinden |
Op Linux kan een proces dat wordt geforkt nadat het bovenliggende proces verbinding heeft gemaakt vastlopen wanneer het de driver gebruikt, zelfs bij een nieuwe verbinding. Met pooling ingeschakeld kan het bovenliggende proces ook hangen. (#566) | Gebruik de spawn startmethode en maak binnen elke worker verbinding. |
| Native tracing in Linux | Met native tracing ingeschakeld kan Python tijdens het opruimen van de driver bij het afsluiten van het proces worden afgebroken. | Laat MSSQL_TDS_TRACE niet ingesteld op Linux. |
| Ongelezen resultaten | Het sluiten van een cursor of het uitvoeren van een andere instructie leest en negeert de resterende resultaten in plaats van ze te annuleren, wat traag kan zijn. Prepared-statement cleanup gebruikt de querytimeout van de statement, maar een timeout van nul laat die cleanup onbeperkt. | Haal alleen de rijen die je nodig hebt, bijvoorbeeld met TOP, en stel Connection.timeout in voordat je de cursor maakt. |
| Aangepaste decodering van smalle tekens | De native driver gebruikt de Windows ANSI-codepage op Windows en de codepage van de proceslocale op Linux en macOS voor smalle tekst. Een expliciete Python-decodering die niet overeenkomt met die codepagina kan onjuiste tekst of bytes opleveren. |
Gebruik de standaard decodering van brede tekens: conn.setdecoding(mssql_python.SQL_CHAR). |
Connection.getinfo() |
Sommige capaciteitswaarden en pakketgrootte-gebaseerde limieten verschillen van msodbcsql18.
SQL_USER_NAME rapporteert de databaseprincipal in plaats van de verbindingsstring UID. |
Raadpleeg de specifieke servermetadata wanneer een gerapporteerde mogelijkheid of limiet van belang is voor je applicatie. |
| Geheugentekortfouten | Sommige driverallocatiefouten beëindigen het Python-proces in plaats van MemoryError op te werpen. (#484) |
Beperk de grootte van de waarden die je stuurt en ophaalt. |
| Leesprestaties voor grote waarden | Gefragmenteerde reads van varchar(max) en nvarchar(max) data kunnen langzamer zijn dan met msodbcsql18. (#473) |
Meet je werklast. |
Meld problemen
Als je een bug tegenkomt, reproduceer deze dan met msodbcsql18 en registreer of het bij beide providers voorkomt. Voor instructies voor het overschakelen, zie De driver inschakelen.
Voeg de output van mssql_python.get_native_provider_info(), je besturingssysteem, Python- en driverversies, en de mislukte T-SQL-batch en foutmelding toe in je rapport:
- Problemen met Rust-stuurprogramma's: https://github.com/microsoft/mssql-rs/issues
-
mssql-pythonProblemen: https://github.com/microsoft/mssql-python/issues
Op Windows stel je deze variabelen in PowerShell voordat je Python start om native-driver diagnostiek te verzamelen. Reproduceer het probleem met mssql-odbc geselecteerd:
$env:MSSQL_TDS_TRACE = "true"
$env:MSSQL_TDS_TRACE_LEVEL = "debug"
$env:MSSQL_TDS_TRACE_DIR = ".\traces"
MSSQL_TDS_TRACE maakt traceren mogelijk, MSSQL_TDS_TRACE_LEVEL selecteert het logniveau en MSSQL_TDS_TRACE_DIR selecteert de map voor per-proces tracebestanden vanuit de native ODBC-driver in plaats van standaard foutuitvoer. Het Rust companion-pakket maakt ook logbestanden aan onder mssql_python_logs in de huidige map.
Traces kunnen T-SQL-tekst- en parameterwaarden bevatten. Anonimiseer gevoelige gegevens voordat je fragmenten deelt. Verwijder na de diagnose deze variabelen en start Python opnieuw om tracing uit te schakelen.