Konfiguráld mssql-python modul beállításait

Az mssql-python illesztőprogram egy Settings olyan osztályt biztosít, amely a modul szintű viselkedését szabályozza. Ezek a beállítások minden kapcsolatot és kurzor műveletet érintenek. Konfiguráld őket már az alkalmazás indításkor, mielőtt bármilyen kapcsolatot létrehoznál.

Hozzáférési beállítások

A jelenlegi Settings objektum lekérése, és tulajdonságai ellenőrzése vagy módosítása:

import mssql_python

# Get settings object
settings = mssql_python.get_settings()

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

Elérhető beállítások

A következő beállítások szabályozzák, hogyan ad vissza az illesztőprogram adatokat, és hogyan formázza az eredményeket.

kisbetűs

A lowercase beállítás szabályozza, hogy az oszlopnevek cursor.description kisbetűkkel jelennek meg. Kapcsold be ezt a beállítást, amikor az alkalmazás név szerint hozzáfér oszlopokhoz, és el akarod kerülni a burkolatok eltéréseit. Webes keretrendszerek, mint a Flask és a FastAPI, gyakran alakítják át a sorokat szótárokká, ami fontossá teszi a következetes betűbetűzést:

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', ...)
Érték Leírás
False Alapértelmezett. Az oszlopnevek megőrzik az eredeti burkolatot.
True A(z) cursor.description oszlopnevei kisbetűssé alakulnak.

Tizedeselválasztó

Az illesztőprogram modulszintű funkciókat biztosít a tizedeselválasztó vezérléséhez numerikus átalakításokhoz. Ezt a beállítást csak akkor változtatd meg, ha az SQL Server példányod egy tizedes elválasztóként vesszóval rendelkező helyet használ, például francia vagy német helyszíneken. A legtöbb alkalmazásnak nem kell ezt a beállítást megváltoztatnia:

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(",")

További információért a tizedes kezelésről lásd: Data type mappings.

native_uuid

Ez a native_uuid beállítás szabályozza, hogy UNIQUEIDENTIFIER az oszlopok Python uuid.UUID objektumként vagy pyodbc-kompatibilis nagybetűs stringként kerülnek-e vissza. Ez a beállítás hasznos azoknak a csapatoknak, akik a pyodbc-ről migrálnak, és a string UUID értékeitől függenek:

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
Érték Leírás
True Alapértelmezett. UNIQUEIDENTIFIER az oszlopok objektumokat adnak vissza uuid.UUID .
False UNIQUEIDENTIFIER Az oszlopok nagybetűs stringeket adnak vissza (PyoDBC-kompatibilis).

Kapcsolatonként is beállíthatod native_uuid :

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

Megjegyzés:

A native_uuid beállítást az mssql-python 1.5.0 verzióban vezették be.

Modul-szintű állandók

Az illezőgép csak olvasható DB-API 2.0 megfelelőségi konstansokat jelenít meg, amelyek leírják a képességeit. Ezeket a konstansokat használjuk olyan kód írására, amely alkalmazkodik különböző DB-API illesztőszerekhez:

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

A apilevel konstans a DB-API-kompatibilitási szintet jelzi:

Érték Meaning
'2.0' Teljes DB-API 2.0 megfelelés.

szálbiztonság

A threadsafety konstans a szál biztonsági szintjét jelzi:

Érték Meaning
0 A szálak nem oszthatják meg a modult.
1 A szálak megoszthatják a modult, de a kapcsolatokat nem.
2 A szálak megoszthatják a modult és a kapcsolatokat.
3 A szálak megoszthatják a modult, a csatlakozásokat és a kurzorokat.

Az mssql-python illesztőprogram a(z) threadsafety = 1 elemet használja, ami a következőt jelenti:

  • A modult importálhatod és használhatod szálakon keresztül.
  • Minden kapcsolatnak egyszerre csak egy szálhoz kell tartoznia.
  • Hozz létre egy szálonként külön kapcsolatot, vagy használj egy kapcsolati medót (alapértelmezettségben engedélyezve). További információkért lásd a Kapcsolatcsoportosítás című részt.

paramstyle

A paramstyle konstans a paraméter helykitöltő formátumát jelenti:

Style Format Example
'qmark' Kérdőjelek WHERE id = ?
'numeric' Numerikus pozíció WHERE id = :1
'named' Nevű WHERE id = :id
'format' ANSI C printf WHERE id = %s
'pyformat' Python formátum WHERE id = %(id)s

Az mssql-python illesztőprogram a(z) paramstyle = 'pyformat' használja. Mindig használj névsoros paramétereket az SQL injekciójának megakadályozására. Soha ne építs lekérdezéseket felhasználói bemenettel stringformázáson vagy f-stringek segítségével:

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

Verzióinformációk

Ellenőrizd, melyik illesztőprogram-verzió van telepítve:

import mssql_python

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

Beállítások beállítása indításkor

Állítsd be a modul konfigurációját egyszer az alkalmazás indításánál, mielőtt bármilyen kapcsolatot létrehoznál. Az értékek korai beállítása megakadályozza az összefüggéstelen viselkedést a kapcsolatok között:

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)

Menetbiztonsági szempontok

A modul beállításai globálisak, és minden kapcsolatot érintenek minden szál között. Ha a kapcsolatok már megnyitása után változtatsz beállítást, a meglévő kapcsolatok nem feltétlenül tükrözik következetesen a változást. Állítsd be az összes konfigurációs értéket, mielőtt létrehozod az első kapcsolatot:

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

Beállításokat konfigurálj a kapcsolat létrehozása előtt. A beállítások megváltoztatása a kapcsolatok létrehozása után következetlen viselkedéshez vezethet.

Kapcsolat-specifikus konfiguráció

Néhány beállítást felülírhatsz minden kapcsolat szerint anélkül, hogy megváltoztatod a globális alapértelmezet. Használj kapcsolatonkénti felülbírálásokat, ha az alkalmazás különböző részein eltérő viselkedésre van szükség. Például egy jelentésmodulnak lehet string UUID-jei szüksége, miközben az alkalmazás többi része objektumokat használ uuid.UUID :

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

# Use the autocommit property
conn.autocommit = True