Konfigurieren der Moduleinstellungen für mssql-python

Der mssql-python-Treiber bietet eine Settings Klasse, die das modulweite Verhalten steuert. Diese Einstellungen beeinflussen alle Verbindungen und Cursoroperationen. Konfigurieren Sie sie einmal beim Anwendungsstart, bevor Sie irgendwelche Verbindungen herstellen.

Zugriffseinstellungen

Rufen Sie das aktuelle Settings Objekt ab und inspizieren oder ändern Sie seine Eigenschaften:

import mssql_python

# Get settings object
settings = mssql_python.get_settings()

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

Verfügbare Einstellungen

Die folgenden Einstellungen steuern, wie der Treiber Daten und Formatergebnisse zurückgibt.

Kleinbuchstaben

Die Einstellung lowercase steuert, ob Spaltennamen in Kleinbuchstaben cursor.description erscheinen. Aktivieren Sie diese Einstellung, wenn Ihre Anwendung Spalten nach Namen aufruft und Sie Casing-Mismatchs vermeiden möchten. Webframeworks wie Flask und FastAPI wandeln Zeilen oft in Wörterbücher um, was konsistente Gehäuse wichtig macht:

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', ...)
Wert Beschreibung
False Standard. Säulennamen bewahren das ursprüngliche Gehäuse.
True Spaltennamen in cursor.description werden in Kleinbuchstaben umgewandelt.

Dezimaltrennzeichen

Der Treiber bietet modulbasierte Funktionen zur Steuerung des Dezimalseparators für numerische Umrechnungen. Ändern Sie diese Einstellung nur, wenn Ihre SQL Server-Instanz einen Ort mit einem Komma als Dezimaltrenner verwendet, wie zum Beispiel französische oder deutsche Orte. Die meisten Anwendungen müssen diese Einstellung nicht ändern:

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 weitere Informationen zur Dezimalbehandlung siehe Datentypabbildungen.

native_uuid

Die Einstellung native_uuid steuert, ob UNIQUEIDENTIFIER Spalten als Python-Objekte uuid.UUID oder als pyodbc-kompatible Großbuchstaben-Zeichenketten zurückgegeben werden. Diese Einstellung ist nützlich für Teams, die von pyodbc migrieren und auf String-UUID-Werte angewiesen sind:

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
Wert Beschreibung
True Standard. UNIQUEIDENTIFIER Spalten geben Objekte zurück uuid.UUID .
False UNIQUEIDENTIFIER Spalten geben Zeichenfolgen in Großbuchstaben zurück (pyodbc-kompatibel).

Du kannst auch pro Verbindung festlegen native_uuid :

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

Note

Das Setting native_uuid wurde in mssql-python Version 1.5.0 eingeführt.

Modulniveau-Konstanten

Der Treiber stellt lesgeschützte DB-API 2.0-Compliance-Konstanten zur Verfügung, die seine Fähigkeiten beschreiben. Verwenden Sie diese Konstanten, um Code zu schreiben, der sich an verschiedene DB-API Treiber anpasst:

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

Die Konstante apilevel meldet das DB-API Compliance-Niveau:

Wert Bedeutung
'2.0' Volle DB-API 2.0-Konformität.

Gewindesicherung

Die Konstante threadsafety meldet das Sicherheitsniveau des Fadens:

Wert Bedeutung
0 Threads können das Modul nicht teilen.
1 Threads können das Modul teilen, aber keine Verbindungen.
2 Threads können das Modul und die Verbindungen teilen.
3 Threads können das Modul, die Verbindungen und die Cursor teilen.

Der mssql-python-Treiber verwendet threadsafety = 1, was bedeutet:

  • Du kannst das Modul importieren und über Threads hinweg verwenden.
  • Jede Verbindung darf jeweils nur zu einem Thread gehören.
  • Erstelle pro Thread eine separate Verbindung oder nutze einen Connection Pool (standardmäßig aktiviert). Weitere Informationen finden Sie unter Connection pooling.

Paramstyle

Die Konstante paramstyle gibt das Parameter-Platzhalterformat an:

Style Format Example
'qmark' Fragezeichen WHERE id = ?
'numeric' Numerische Position WHERE id = :1
'named' Benannt WHERE id = :id
'format' ANSI C printf WHERE id = %s
'pyformat' Python-Format WHERE id = %(id)s

Der mssql-python-Treiber verwendet paramstyle = 'pyformat'. Verwenden Sie immer benannte Parameter, um SQL-Injection zu verhindern. Erstellen Sie niemals Abfragen mit Benutzereingaben durch String-Formatierung oder f-Strings:

# 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}
)

Versionsinformationen

Überprüfen Sie, welche Version des Treibers installiert ist:

import mssql_python

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

Einstellungen beim Start konfigurieren

Setze die Modulkonfiguration einmal beim Start der Anwendung, bevor du Verbindungen herstellt. Das frühe Festlegen von Werten verhindert inkonsistentes Verhalten zwischen Verbindungen:

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)

Überlegungen zur Thread-Sicherheit

Die Moduleinstellungen sind global und beeinflussen alle Verbindungen über alle Threads hinweg. Wenn du eine Einstellung änderst, nachdem die Verbindungen bereits geöffnet sind, spiegeln bestehende Verbindungen die Änderung möglicherweise nicht konsistent wider. Setze alle Konfigurationswerte, bevor du deine erste Verbindung erstellst:

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

Konfigurieren Sie die Einstellungen, bevor Sie Verbindungen herstellen. Das Ändern der Einstellungen nach der Verbindung kann zu inkonsistentem Verhalten führen.

Verbindungsspezifische Konfiguration

Du kannst einige Einstellungen pro Verbindung überschreiben, ohne die globale Standardeinstellung zu ändern. Verwenden Sie verbindungsspezifische Überschreibungen, wenn verschiedene Teile Ihrer Anwendung ein unterschiedliches Verhalten benötigen. Zum Beispiel könnte ein Berichtsmodul String-UUIDs benötigen, während der Rest der Anwendung Objekte verwendet uuid.UUID :

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

# Use the autocommit property
conn.autocommit = True