Kommentar
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
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