Notatka
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Sterownik mssql-python zapewnia klasę Settings kontrolującą zachowanie całego modułu. Te ustawienia wpływają na wszystkie połączenia i operacje kursora. Konfiguruj je raz przy starcie aplikacji, zanim utworzysz jakiekolwiek połączenia.
Ustawienia dostępu
Pobierz aktualny Settings obiekt i sprawdź lub zmodyfikuj jego właściwości:
import mssql_python
# Get settings object
settings = mssql_python.get_settings()
# Check current values
print(settings.lowercase)
print(settings.decimal_separator)
Dostępne ustawienia
Poniższe ustawienia kontrolują, jak sterownik zwraca dane i formatuje wyniki.
małe litery
Ustawienie lowercase określa, czy nazwy kolumn w cursor.description są wyświetlane małymi literami. Włącz to ustawienie, jeśli aplikacja odwołuje się do kolumn po nazwie i chcesz uniknąć niezgodności w wielkości liter. Frameworki internetowe, takie jak Flask i FastAPI, często konwertują wiersze na słowniki, co sprawia, że spójne określenia są ważne:
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', ...)
| Wartość | Opis |
|---|---|
False |
Domyślne. Nazwy kolumn zachowują oryginalną obudowę. |
True |
Nazwy kolumn w cursor.description są zamieniane na małe litery. |
Separator dziesiętny
Sterownik zapewnia funkcje na poziomie modułu do sterowania separatorem dziesiętnym dla konwersji numerycznych. Zmień to ustawienie tylko wtedy, gdy instancja SQL Server używa lokalizacji z przecinkiem jako separatorem dziesiętnym, na przykład francuskie lub niemieckie lokalizacje. Większość aplikacji nie musi zmieniać tego ustawienia:
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(",")
Więcej informacji o obsłudze dziesiętnej można znaleźć w artykule Odwzorowania typów danych.
native_uuid
Ustawienie native_uuid określa, czy kolumny UNIQUEIDENTIFIER są zwracane jako obiekty Python uuid.UUID, czy jako zgodne z pyodbc ciągi znaków pisane wielkimi literami. To ustawienie jest przydatne dla zespołów migrujących z pyodbc, które korzystają z wartości UUID w postaci ciągów znaków:
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
| Wartość | Opis |
|---|---|
True |
Domyślne.
UNIQUEIDENTIFIER kolumny zwracają uuid.UUID obiekty. |
False |
UNIQUEIDENTIFIER kolumny zwracają łańcuchy pisane wielkimi literami (zgodne z pyodbc). |
Możesz też ustawić native_uuid dla każdego połączenia:
# Override for a specific connection
conn = mssql_python.connect(connection_string, native_uuid=False)
Note
To ustawienie native_uuid zostało wprowadzone w wersji 1.5.0 biblioteki mssql-python.
Stałe na poziomie modułu
Sterownik ujawnia stałe zgodności DB-API 2.0 tylko do odczytu, które opisują jego możliwości. Użyj tych stałych do pisania kodu dostosowującego się do różnych sterowników DB-API:
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
Stała apilevel określa poziom zgodności z DB-API:
| Wartość | Meaning |
|---|---|
'2.0' |
Pełna zgodność z DB-API 2.0. |
Bezpieczeństwo gwintu
threadsafety Stała określa poziom bezpieczeństwa wątków:
| Wartość | Meaning |
|---|---|
0 |
Wątki nie mogą udostępniać modułu. |
1 |
Wątki mogą współdzielić moduł, ale nie połączenia. |
2 |
Wątki mogą współdzielić moduł i połączenia. |
3 |
Wątki mogą współdzielić moduł, połączenia i kursory. |
Sterownik mssql-python używa threadsafety = 1, co oznacza:
- Możesz importować i używać modułu między wątkami.
- Każde połączenie musi należeć tylko do jednego wątku naraz.
- Stwórz osobne połączenie na każdy wątek lub użyj puli połączeń (domyślnie włączonej). Więcej informacji można znaleźć w artykule Pula połączeń.
Paramstyle
Stała paramstyle określa format symbolu zastępczego parametru:
| Style | Format | Przykład |
|---|---|---|
'qmark' |
Znaki zapytania | WHERE id = ? |
'numeric' |
Pozycja liczbowa | WHERE id = :1 |
'named' |
Nazwany | WHERE id = :id |
'format' |
ANSI C printf | WHERE id = %s |
'pyformat' |
Format języka Python | WHERE id = %(id)s |
Sterownik mssql-python używa paramstyle = 'pyformat'. Zawsze używaj nazwanych parametrów, aby zapobiec wstrzyknięciu SQL. Nigdy nie twórz zapytań z użyciem danych wejściowych użytkownika za pomocą formatowania ciągów ani f-stringów:
# 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}
)
Informacje o wersji
Sprawdź, która wersja sterownika jest zainstalowana:
import mssql_python
# Driver version
print(mssql_python.__version__) # e.g., '1.5.0'
Konfiguruj ustawienia przy starcie
Ustawij konfigurację modułu po uruchomieniu aplikacji, zanim utworzysz jakiekolwiek połączenia. Wczesne ustawianie wartości zapobiega niespójnemu zachowaniu między połączeniami:
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)
Aspekty bezpieczeństwa gwintu
Ustawienia modułu są globalne i wpływają na wszystkie połączenia we wszystkich wątkach. Jeśli zmienisz ustawienie po tym, jak połączenia są już otwarte, istniejące połączenia mogą nie odzwierciedlać tej zmiany konsekwentnie. Ustaw wszystkie wartości konfiguracyjne przed utworzeniem pierwszego połączenia:
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
Skonfiguruj ustawienia przed utworzeniem połączeń. Zmiana ustawień po utworzeniu połączeń może prowadzić do niespójnego zachowania.
Konfiguracja specyficzna dla połączenia
Możesz zmienić niektóre ustawienia dla poszczególnych połączeń bez zmiany ustawień globalnych. Używaj zastąpień dla poszczególnych połączeń, gdy różne części aplikacji wymagają odmiennego działania. Na przykład moduł raportujący może potrzebować UUID ciągów tekstowych, podczas gdy reszta aplikacji korzysta z uuid.UUID obiektów:
# Per-connection native_uuid override
conn = mssql_python.connect(connection_string, native_uuid=False)
# Use the autocommit property
conn.autocommit = True