Verbindingsstrings voor mssql-python

De mssql-python-driver ondersteunt de volgende verbindingsreeks-sleutelwoorden bij verbinding met SQL Server, Azure SQL Database, Azure SQL Managed Instance en SQL database in Microsoft Fabric.

Syntaxis van verbindingsreeks

Verbindingsstrings gebruiken met puntkomma-gescheiden sleutel-waarde paren:

keyword1=value1;keyword2=value2;...

Wikkelwaarden die speciale tekens bevatten (puntkomma's, gelijke tekens of krulbare haakjes) in krulbare hakjes:

PWD={my;complex=password}

Om een letterlijke sluitende scène in een waarde op te nemen, gebruik je twee sluitingscrace (}}):

PWD={password}}with}}brace}

Basisvoorbeelden van verbindingen

De volgende voorbeelden laten zien hoe je verbinding kunt maken met verschillende authenticatiemethoden. Voor productieapplicaties gebruik Microsoft Entra-authenticatie waar mogelijk. Het verwijdert wachtwoorden uit je code en verbindingsstrings.

Dit voorbeeld gebruikt ActiveDirectoryDefault, dat meerdere credentialbronnen probeert (Azure CLI, omgevingsvariabelen, beheerde identiteit) in volgorde. Er wordt geen wachtwoord opgeslagen in de code:

import mssql_python

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

SQL Server met SQL-authenticatie

Gebruik SQL-authenticatie alleen voor lokale ontwikkeling tegen een SQL Server-instantie die jij beheert. Inloggegevens zijn ingebed in de verbindingsreeks, dus bewaar ze in omgevingsvariabelen of een .env bestand in plaats van in de broncode:

conn = mssql_python.connect(
    "Server=<server>;"
    "Database=<database>;"
    "UID=<login>;"
    "PWD=<password>;"
    "Encrypt=yes;"
)

Azure SQL met Microsoft Entra authentication

De verbindingsreeks voor Azure SQL Database is hetzelfde als voor SQL Server. ActiveDirectoryDefaultwerkt over lokale ontwikkeling, containers en door Azure gehoste omgevingen zonder codewijzigingen:

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

Gebruik trefwoordargumenten

Je kunt verbindingsparameters als trefwoordargumenten doorgeven in plaats van of als aanvulling op een verbindingsreeks. Trefwoordargumenten vermijden de ontsnappingsvalkuilen van verbindingsreeks assembly. Wachtwoorden met speciale tekens zoals @, ;, , {of } hoeven geen curly-brace wrapping te gebruiken wanneer ze als trefwoordargumenten worden doorgegeven:

conn = mssql_python.connect(
    server="<server>.database.windows.net",
    database="<database>",
    authentication="ActiveDirectoryDefault",
    encrypt="yes"
)

Vergelijk met een verbindingsreeks assembly, waarbij een wachtwoord dat bevat @ moet worden gewrapped:

# Connection string requires escaping
conn = mssql_python.connect("Server=srv;UID=user;PWD={p@ss;word};")

# Keyword arguments - no escaping needed
conn = mssql_python.connect(server="srv", uid="user", pwd="p@ss;word")

De driver voegt sleutelwoordargumenten samen in de verbindingsreeks na normalisatie. Als een trefwoordargument overeenkomt met een parameter die al in de verbindingsreeks zit, krijgt het trefwoordargument voorrang en overschrijft het de waarde van de verbindingsreeks:

# The keyword argument database="production" overrides Database=dev in the connection string
conn = mssql_python.connect(
    "Server=<server>.database.windows.net;Database=<database>;Encrypt=yes;",
    database="production",
    authentication="ActiveDirectoryDefault"
)
# Connects to "production", not "dev"

Het volgende voorbeeld combineert een verbindingsreeks met trefwoordargumenten:

conn = mssql_python.connect(
    "Server=<server>.database.windows.net;Database=<database>;",
    authentication="ActiveDirectoryDefault",
    encrypt="yes"
)

Trefwoorden voor verbindingsreeks

Server en database

Specificeer de doel-SQL Server-instantie en database voor de verbinding.

Keyword Aliassen Default Beschrijving
Server addr, address None SQL Server-hostnaam, IP-adres of benoemde instantie. Voor benoemde instanties gebruik server\instance. Voor Azure SQL, gebruik server.database.windows.net. Om een poort te specificeren, gebruik server,port.
Database None None Databasenaam om mee te verbinden.

Authentication

Geef inloggegevens voor SQL-authenticatie of specificeer een Microsoft Entra-authenticatiemodus. Voor opties zonder wachtwoord, zie Microsoft Entra authenticatiemodi.

Keyword Aliassen Default Beschrijving
UID uid None Gebruikersnaam voor SQL-authenticatie.
PWD pwd None Wachtwoord voor SQL-authenticatie.
Trusted_Connection trusted_connection no Gebruik Windows Integrated Authentication. Stel in op yes om in te schakelen.
Authentication authentication None Microsoft Entra authenticatiemodus. Zie Microsoft Entra-authenticatie.

Versleuteling en beveiliging

Alle verbindingen worden standaard gebruikt Encrypt=yes . Voor de meeste toepassingen is de standaard voldoende. Gebruik strict alleen wanneer je SQL Server-instantie TDS 8.0 ondersteunt en je TLS 1.3 nodig hebt. TrustServerCertificate=yes Gebruik alleen in ontwikkelomgevingen met zelfondertekende certificaten.

Keyword Aliassen Default Beschrijving
Encrypt encrypt yes SCHAKEL TLS-versleuteling in. Waarden: yes, no, strict. Gebruik strict voor TDS 8.0 met verplichte TLS 1.3.
TrustServerCertificate trust_server_certificate, trustservercertificate no Vertrouw op zelfondertekende servercertificaten zonder validatie. Ingesteld op yes alleen voor ontwikkeling.
HostnameInCertificate hostnameincertificate None Verwachte hostnaam in het TLS-certificaat van de server.
ServerCertificate servercertificate None Pad naar een PEM-bestand met de vertrouwde certificaatautoriteit.
ServerSPN serverspn None Server Service Principal naam voor Kerberos-authenticatie.

Hoge beschikbaarheid en failover

Deze trefwoorden zijn van toepassing op Always On-beschikbaarheidsgroepen. Stel in ApplicationIntent=ReadOnly dat leesintensieve workloads (rapporten, analytics) naar secundaire replica's worden geleid, waardoor de belasting op de primaire wordt verminderd. Stel MultiSubnetFailover=yes in wanneer je beschikbaarheidsgroep meerdere subnetten beslaat.

Keyword Aliassen Default Beschrijving
MultiSubnetFailover multisubnetfailover no Schakel multi-subnet failover in voor Always On beschikbaarheidsgroepen.
ApplicationIntent applicationintent ReadWrite Geef het type werklast van de applicatie op. Gebruik ReadOnly voor alleen-lezen routering naar secundaire replica's.
ConnectRetryCount connectretrycount 1 Aantal automatische herverbindingspogingen voor de veerkracht van de inactieve verbinding. Dit is een driver-niveau functie voor verbroken idle verbindingen, geen vervanging voor applicatie-niveau herpogingslogica.
ConnectRetryInterval connectretryinterval 10 Seconden tussen pogingen tot het weerkoppelen van de inactieve verbinding met de verbinding.

Optreden en netwerk

De standaardinstellingen werken voor de meeste applicaties. Verhoog PacketSize (tot 32767) voor bulkgegevensoverdrachten. Configureer KeepAlive of verbindingen firewalls of load balancers overschrijden die de inactieve TCP-sessies laten vallen.

Keyword Aliassen Default Beschrijving
PacketSize packet size, packetsize 4096 Pakketgrootte van netwerkpakketten in bytes (512–32767).
KeepAlive keepalive None TCP keep-alive interval in seconden.
KeepAliveInterval keepaliveinterval None TCP keep-alive herkansingsinterval in seconden.
IpAddressPreference ipaddresspreference None IP-adresvoorkeur: IPv4First, IPv6First, . UsePlatformDefault

Gereserveerde trefwoorden

Keyword Beschrijving
Driver Gereserveerd voor intern gebruik. De driver beheert deze waarde automatisch.
APP Gereserveerd. Altijd ingesteld op "MSSQL-Python" door de chauffeur.

Microsoft Entra-authenticatiemodi

Het Authentication trefwoord ondersteunt de volgende waarden. Kies de modus die bij je inzet past:

Waarde Beschrijving Wanneer gebruiken
ActiveDirectoryDefault Gebruikt DefaultAzureCredential van de Azure Identity SDK. Probeert meerdere authenticatiemethoden achter elkaar. Lokale ontwikkeling over Azure CLI, Azure PowerShell en Azure Developer CLI. Voor productie gebruik je een specifieke modus (ActiveDirectoryMSI, ActiveDirectoryServicePrincipal) om de trage credential-chain walk te vermijden.
ActiveDirectoryInteractive Interactieve aanmelden via de browser. Op Windows delegeert het native aan de ODBC-driver. Lokale ontwikkeling en tools waarbij een gebruiker aanwezig is om te authenticeren in een browser.
ActiveDirectoryDeviceCode Apparaatcodeflow voor headless omgevingen. Toont een code om in te voeren op https://microsoft.com/devicelogin. SSH-sessies, Docker-containers of andere omgevingen zonder browser.
ActiveDirectoryPassword Deprecated. Gebruikersnaam- en wachtwoordauthenticatie met Microsoft Entra ID. Vereist UID en PWD. Gebruikt de ROPC-flow, die niet compatibel is met MFA. Niet aanbevolen. Gebruik ActiveDirectoryMSI of ActiveDirectoryServicePrincipal in plaats daarvan.
ActiveDirectoryMSI Managed Service Identity voor Azure-gehoste applicaties. Azure VM's, App Service of Azure Functions waarbij beheerde identiteit wordt geconfigureerd. Er zijn geen referenties nodig.
ActiveDirectoryServicePrincipal Service principal authenticatie. Vereist UID (client ID) en PWD (client secret). CI/CD-pijplijnen en achtergronddiensten die een geregistreerde applicatie-identiteit gebruiken.
ActiveDirectoryIntegrated Windows Geïntegreerde authenticatie met Microsoft Entra ID (Kerberos). Domein-gekoppelde Windows-machines in bedrijfsomgevingen met Kerberos geconfigureerd.

Voor reproduceerbare Docker-, devcontainer- en CI-omgevingsopstelling, zie Container en lokale ontwikkeling. Dat artikel centraliseert de runtimeselectie van Python en laat zien hoe digest-vastgepinde afbeeldingen in gedeelde omgevingen gebruikt kunnen worden.

Voorbeeld: DefaultAzureCredential

ActiveDirectoryDefaultwordt overeengebracht met de Azure Identity-ketenDefaultAzureCredential. Het probeert eerst de Azure CLI-token tijdens lokale ontwikkeling, daarna managed identity wanneer het wordt uitgezonden naar Azure:

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

Voorbeeld: Apparaatcodeflow

Gebruik apparaatcodeflow wanneer je draait in omgevingen zonder browser, zoals SSH-sessies of Docker-containers. De driver toont een URL en een code die op een apart apparaat ingevoerd moet worden:

conn = mssql_python.connect(
    "Server=<server>.database.windows.net;"
    "Database=<database>;"
    "Authentication=ActiveDirectoryDeviceCode;"
    "Encrypt=yes;"
)
# Follow the prompt to authenticate at https://microsoft.com/devicelogin

Voorbeeld: Service Principal

Service principal-authenticatie gebruikt een geregistreerde applicatie-identiteit met een client-ID en geheim. Gebruik deze aanpak voor CI/CD-pijplijnen en achtergrondservices die draaien zonder gebruikersinteractie:

conn = mssql_python.connect(
    "Server=<server>.database.windows.net;"
    "Database=<database>;"
    "Authentication=ActiveDirectoryServicePrincipal;"
    "UID=<client-id>;"
    "PWD=<client-secret>;"
    "Encrypt=yes;"
)

Om de applicatie te registreren en database-toegang te verlenen, zie Microsoft Entra service principals with Azure SQL. Voor de volledige setup in mssql-python, zie Service principal authenticatie.

Verbindingstijdoverschrijding

Stel de verbindingstime-out in met de timeout parameter. Gebruik een timeout om te voorkomen dat je applicatie oneindig vastloopt wanneer de server onbereikbaar is:

# 30-second connection timeout
conn = mssql_python.connect(connection_string, timeout=30)

Je kunt ook de time-out op een bestaande verbinding wijzigen:

conn.timeout = 60

Modus Automatisch aanpassen

Standaard autocommit is False, wat expliciete commit() aanroepen vereist. Schakel autocommit in voor DDL-statements of alleen-lezen queries die geen transactiecontrole nodig hebben:

# Via parameter
conn = mssql_python.connect(connection_string, autocommit=True)

# Or after connection
conn.setautocommit(True)

Verbindingskenmerken

Stel ODBC-verbindingsattributen in voordat de verbinding wordt opgebouwd door te gebruiken attrs_before:

import mssql_python

conn = mssql_python.connect(
    connection_string,
    attrs_before={
        mssql_python.SQL_ATTR_LOGIN_TIMEOUT: 30,
        mssql_python.SQL_ATTR_CONNECTION_TIMEOUT: 60,
    }
)

Programmatic verbindingsreeks building

Om verbindingsreeks injection te voorkomen, gebruik geen stringconcatenatie of f-strings met gebruikersinvoer. Gebruik in plaats daarvan trefwoordargumenten of omgevingsvariabelen. Voor meer constructiepatronen, waaronder JSON/YAML-configuratiebestanden, Azure Key Vault en een builder-klasse, zie Build connection strings programmatically.

import os

conn = mssql_python.connect(
    server=os.environ["DB_SERVER"],
    database=os.environ["DB_NAME"],
    authentication=os.environ.get("DB_AUTH", "ActiveDirectoryDefault"),
    encrypt="yes"
)

Verificatie van verbindingsstrings

De driver valideert verbindingsstrings en verhoogt ConnectionStringParseError voor onbekende of verkeerd gespelde trefwoorden:

try:
    conn = mssql_python.connect("Servr=localhost;")  # Typo
except mssql_python.ConnectionStringParseError as e:
    print(f"Invalid connection string: {e}")
    # Output: Unknown keyword 'Servr'