Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Ovladač mssql-python poskytuje třídu Settings , která řídí chování v celém modulu. Tato nastavení ovlivňují všechna spojení a operace kurzoru. Nakonfigurujte je jednou při spuštění aplikace, než vytvoříte jakékoliv připojení.
Nastavení přístupu
Získejte aktuální Settings objekt a zkontrolujte nebo upravte jeho vlastnosti:
import mssql_python
# Get settings object
settings = mssql_python.get_settings()
# Check current values
print(settings.lowercase)
print(settings.decimal_separator)
Dostupná nastavení
Následující nastavení určují, jak ovladač vrací data a formátuje výsledky.
malá písmena
Nastavení lowercase určuje, zda se názvy sloupců v cursor.description zobrazují malými písmeny. Toto nastavení zapněte, pokud vaše aplikace přistupuje ke sloupcům podle názvu a chcete se vyhnout nesouladu ve velikosti písmen. Webové frameworky jako Flask a FastAPI často převádějí řádky na slovníky, což činí konzistentní slovní písmo důležitým:
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', ...)
| Hodnota | Popis |
|---|---|
False |
Výchozí. Názvy sloupců zachovávají původní kryt. |
True |
Názvy sloupců v cursor.description se převádějí na malá písmena. |
Desetinný oddělovač
Ovladač poskytuje funkce na úrovni modulu pro řízení desetinného oddělovače pro číselné převody. Toto nastavení změňte pouze pokud vaše instance SQL Server používá lokalitu s čárkou jako desetinným oddělovačem, například francouzské nebo německé lokality. Většina aplikací toto nastavení nezmění:
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(",")
Pro více informací o manipulaci s desetinnými čísly viz mapování datových typů.
native_uuid
Nastavení native_uuid určuje, zda se sloupce UNIQUEIDENTIFIER vracejí jako objekty Python uuid.UUID, nebo jako řetězce kompatibilní s pyodbc psané velkými písmeny. Toto nastavení je užitečné pro týmy přecházející z pyodbc, které závisejí na hodnotách UUID ve formě řetězce:
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
| Hodnota | Popis |
|---|---|
True |
Výchozí.
UNIQUEIDENTIFIER sloupce vracejí uuid.UUID objekty. |
False |
UNIQUEIDENTIFIER Sloupce vracejí řetězce psané velkými písmeny (kompatibilní s pyodbc). |
Můžete také nastavit native_uuid pro každé připojení:
# Override for a specific connection
conn = mssql_python.connect(connection_string, native_uuid=False)
Note
Toto native_uuid nastavení bylo zavedeno ve verzi mssql-python 1.5.0.
Konstanty na úrovni modulů
Ovladač zpřístupňuje konstanty kompatibility DB-API 2.0 jen pro čtení, které popisují jeho schopnosti. Použijte tyto konstanty k napsání kódu, který se přizpůsobuje různým DB-API ovladačům:
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
Konstanta apilevel uvádí DB-API úroveň souladu:
| Hodnota | Význam |
|---|---|
'2.0' |
Plný soulad s DB-API 2.0. |
Bezpečnost závitů
Konstanta hlásí threadsafety úroveň bezpečnosti vláken:
| Hodnota | Význam |
|---|---|
0 |
Vlákna nemohou sdílet modul. |
1 |
Vlákna mohou sdílet modul, ale ne připojení. |
2 |
Vlákna mohou sdílet modul a připojení. |
3 |
Vlákna mohou sdílet stejný modul, připojení a kurzory. |
Ovladač mssql-python používá threadsafety = 1, což znamená:
- Modul můžete importovat a používat napříč vlákny.
- Každé spojení musí patřit pouze jednomu vláknu najednou.
- Vytvořte samostatné spojení pro každé vlákno, nebo použijte pool připojení (ve výchozím nastavení povolený). Pro více informací viz Sdružování připojení.
ParamStyle
Konstanta paramstyle hlásí formát zástupného parametru:
| Style | Format | Příklad |
|---|---|---|
'qmark' |
Otazníky | WHERE id = ? |
'numeric' |
Číselná pozice | WHERE id = :1 |
'named' |
Pojmenovaný | WHERE id = :id |
'format' |
ANSI C printf | WHERE id = %s |
'pyformat' |
Python formát | WHERE id = %(id)s |
Ovladač mssql-python používá paramstyle = 'pyformat'. Vždy používejte pojmenované parametry, abyste zabránili SQL injection. Nikdy nevytvářejte dotazy s uživatelským vstupem pomocí formátování řetězců nebo f-stringů:
# 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}
)
Informace o verzi
Zkontrolujte, která verze ovladače je nainstalovaná:
import mssql_python
# Driver version
print(mssql_python.__version__) # e.g., '1.5.0'
Nastavte nastavení při spuštění
Nastavte konfiguraci modulu při spuštění aplikace, než vytvoříte jakékoliv připojení. Včasné nastavení hodnot zabraňuje nekonzistentnímu chování napříč spojeními:
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)
Bezpečnostní aspekty závitu
Nastavení modulu je globální a ovlivňuje všechna připojení ve všech vláknech. Pokud změníte nastavení poté, co jsou připojení již otevřená, stávající spojení nemusí tuto změnu konzistentně odrážet. Nastavte všechny konfigurační hodnoty před vytvořením prvního připojení:
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
Před vytvořením připojení nastavte nastavení. Změna nastavení po vytvoření spojení může vést k nekonzistentnímu chování.
Konfigurace specifická pro spojení
Některé nastavení můžete přepsat pro každé připojení, aniž byste měnili globální výchozí nastavení. Používejte přepsání pro jednotlivé spojení, když různé části vaší aplikace potřebují odlišné chování. Například modul pro reportování může potřebovat řetězcové UUID, zatímco zbytek aplikace používá uuid.UUID objekty:
# Per-connection native_uuid override
conn = mssql_python.connect(connection_string, native_uuid=False)
# Use the autocommit property
conn.autocommit = True