Konfigurera mssql-python-modulinställningar

mssql-python-drivrutinen tillhandahåller en Settings klass som styr beteendet i hela modulen. Dessa inställningar påverkar alla anslutningar och marköroperationer. Konfigurera dem en gång vid applikationsstart, innan du skapar några anslutningar.

Åtkomstinställningar

Hämta det aktuella Settings objektet och inspektera eller ändra dess egenskaper:

import mssql_python

# Get settings object
settings = mssql_python.get_settings()

# Check current values
print(settings.lowercase)
print(settings.decimal_separator)

Tillgängliga inställningar

Följande inställningar styr hur drivrutinen returnerar data och formaterar resultat.

Gemener

Inställningen lowercase styr om kolumnnamnen i cursor.description anges med gemener. Aktivera den här inställningen när din applikation kommer åt kolumner efter namn och du vill undvika fel på grund av skillnader i användning av stora och små bokstäver. Webbramverk som Flask och FastAPI konverterar ofta rader till ordlistor, vilket gör enhetlig skiftlägesanvändning viktig:

settings = mssql_python.get_settings()

# Enable lowercase column names (default: False)
settings.lowercase = True

# Column names in cursor.description are now lowercased:
# ('productid', ...) instead of ('ProductID', ...)
Värde Beskrivning
False Standardinställning. Kolumnnamn bevarar det ursprungliga höljet.
True Kolumnnamn i cursor.description konverteras till gemener.

Decimalavgränsare

Drivrutinen tillhandahåller modulnivåfunktioner för att styra decimalseparatorn för numeriska omvandlingar. Ändra denna inställning endast om din SQL Server-instans använder en plats med komma som decimalseparator, såsom franska eller tyska platser. De flesta applikationer behöver inte ändra denna inställning:

import mssql_python

# Get current separator
sep = mssql_python.getDecimalSeparator()
print(f"Current separator: {sep}")  # Usually "."

# Set custom separator (for locales using comma)
mssql_python.setDecimalSeparator(",")

För mer information om decimalhantering, se Datatypmappningar.

native_uuid

Inställningen native_uuid styr om UNIQUEIDENTIFIER-kolumner returneras som Python-objekt uuid.UUID eller som pyodbc-kompatibla strängar i versaler. Denna inställning är användbar för team som migrerar från pyodbc och som är beroende av sträng-UUID-värden:

settings = mssql_python.get_settings()

# Return UUIDs as uuid.UUID objects (default: True)
settings.native_uuid = True

# Return UUIDs as uppercase strings (pyodbc-compatible)
settings.native_uuid = False
Värde Beskrivning
True Standardinställning. UNIQUEIDENTIFIER kolumner returnerar uuid.UUID objekt.
False UNIQUEIDENTIFIER kolumner returnerar strängar i versaler (pyodbc-kompatibla).

Du kan också ställa native_uuid in per anslutning:

# Override for a specific connection
conn = mssql_python.connect(connection_string, native_uuid=False)

Note

Inställningen native_uuid introducerades i mssql-python version 1.5.0.

Modulnivåkonstanter

Drivrutinen exponerar skrivskyddad DB-API 2.0-efterlevnadskonstanter som beskriver dess kapaciteter. Använd dessa konstanter för att skriva kod som anpassar sig till olika DB-API drivrutiner:

import mssql_python

# DB-API 2.0 compliance level
print(mssql_python.apilevel)      # '2.0'

# Thread safety level
print(mssql_python.threadsafety)  # 1

# Parameter style
print(mssql_python.paramstyle)    # 'pyformat'

apilevel

Konstanten apilevel rapporterar DB-API efterlevnadsnivå:

Värde Meaning
'2.0' Fullständig överensstämmelse med DB-API 2.0.

trådsäkerhet

Konstanten threadsafety rapporterar trådsäkerhetsnivån:

Värde Meaning
0 Trådar kan inte dela modulen.
1 Trådar kan dela modulen men inte anslutningar.
2 Trådar kan dela modulen och anslutningarna.
3 Trådar kan dela modulen, anslutningar och markörer.

mssql-python-drivrutinen använder threadsafety = 1, vilket betyder:

  • Du kan importera och använda modulen över trådar.
  • Varje anslutning får tillhöra endast en tråd åt gången.
  • Skapa en separat anslutning per tråd, eller använd en anslutningspool (aktiverad som standard). För mer information, se Connection pooling.

paramstyle

Konstanten paramstyle rapporterar parameterplatshållarformatet:

Style Format Example
'qmark' Frågetecken WHERE id = ?
'numeric' Numerisk placering WHERE id = :1
'named' Namn WHERE id = :id
'format' ANSI C printf WHERE id = %s
'pyformat' Python-format WHERE id = %(id)s

mssql-python-drivrutinen använder paramstyle = 'pyformat'. Använd alltid namngivna parametrar för att förhindra SQL-injektion. Bygg aldrig frågor med användarinput genom strängformatering eller f-strängar:

# Use named parameters with %(name)s syntax
cursor.execute(
    "SELECT * FROM Production.Product WHERE ProductSubcategoryID = %(cat)s AND ListPrice > %(price)s",
    {"cat": 5, "price": 10.00}
)

Versionsinformation

Kontrollera vilken version av drivrutinen som är installerad:

import mssql_python

# Driver version
print(mssql_python.__version__)  # e.g., '1.5.0'

Konfigurera inställningar vid uppstart

Ställ in modulkonfigurationen en gång vid applikationsstart, innan du skapar några anslutningar. Att sätta värden tidigt förhindrar inkonsekvent beteende mellan anslutningar:

import mssql_python

def configure_driver():
    """Configure mssql-python settings for this application."""
    settings = mssql_python.get_settings()
    
    # Use lowercase column names in cursor.description
    settings.lowercase = True

# Call at application startup
configure_driver()

# All subsequent connections use these settings
conn = mssql_python.connect(connection_string)

Trådsäkerhetsaspekter

Modulinställningarna är globala och påverkar alla anslutningar över alla trådar. Om du ändrar en inställning efter att anslutningarna redan är öppna, kanske befintliga anslutningar inte speglar förändringen konsekvent. Ställ in alla konfigurationsvärden innan du skapar din första anslutning:

import mssql_python
import threading

# Settings changes affect all threads
settings = mssql_python.get_settings()
settings.lowercase = True  # Affects all connections in all threads

def worker():
    # This connection uses the global settings
    conn = mssql_python.connect(connection_string)
    cursor = conn.cursor()
    cursor.execute("SELECT Name FROM Production.Product")
    row = cursor.fetchone()
    print(cursor.description[0][0])  # 'name' due to global setting

threads = [threading.Thread(target=worker) for _ in range(5)]
for t in threads:
    t.start()
for t in threads:
    t.join()

Important

Konfigurera inställningar innan du skapar anslutningar. Att ändra inställningar efter att anslutningar skapats kan leda till inkonsekvent beteende.

Anslutningsspecifik konfiguration

Du kan åsidosätta vissa inställningar per anslutning utan att ändra den globala standarden. Använd per-anslutning-överskrivningar när olika delar av din applikation behöver olika beteende. Till exempel kan en rapporteringsmodul behöva sträng-UUID medan resten av applikationen använder uuid.UUID objekt:

# Per-connection native_uuid override
conn = mssql_python.connect(connection_string, native_uuid=False)

# Use the autocommit property
conn.autocommit = True