mssql-python modül ayarlarını konfigure et

mssql-python sürücüsü, modül genelinde davranışı kontrol eden bir Settings sınıf sağlar. Bu ayarlar tüm bağlantıları ve imleç işlemlerini etkiler. Bunları, herhangi bir bağlantı oluşturmadan önce, uygulama başlatılırken bir kez yapılandırın.

Erişim ayarları

Mevcut Settings nesneyi alın ve özelliklerini inceleyin veya değiştirin:

import mssql_python

# Get settings object
settings = mssql_python.get_settings()

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

Kullanılabilir ayarlar

Aşağıdaki ayarlar, sürücünün veri döndürme ve sonuçları nasıl biçimlendirmesini kontrol eder.

küçük harf

Ayar, lowercase içindeki cursor.description sütun isimlerinin küçük harflerle olup olmadığını kontrol eder. Uygulamanız isimle sütunlara eriştiğinde ve kılıf uyumsuzluklarından kaçınmak istediğinizde bu ayarı etkinleştirin. Flask ve FastAPI gibi web çerçeveleri genellikle satırları sözlüklere dönüştürür; bu nedenle büyük/küçük harf kullanımında tutarlılık önemlidir:

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', ...)
Değer Açıklama
False Varsayılan. Sütun isimleri orijinal kılıfı korur.
True cursor.description içindeki sütun adları küçük harfe dönüştürülür.

Ondalık ayırıcı

Sürücü, sayısal dönüşümler için ondalık ayırıcıyı kontrol etmek için modül düzeyinde fonksiyonlar sağlar. Bu ayarı yalnızca SQL Server örneğiniz, Fransızca veya Almanca gibi ondalık ayrımcı olarak virgül içeren bir yerel kullanıyorsa değiştirin. Çoğu uygulama bu ayarı değiştirmeye gerek yoktur:

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

Ondalık işleme hakkında daha fazla bilgi için bkz. Veri tipi eşlemeleri.

native_uuid

Ayar, native_uuid sütunların Python UNIQUEIDENTIFIER nesnesi olarak mı yoksa pyodbc uyumlu büyük harf dizileri olarak mı uuid.UUID döndürüleceğini kontrol eder. Bu ayar, dize UUID değerlerine bağlı olan pyodbc'den göç eden ekipler için faydalıdır:

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
Değer Açıklama
True Varsayılan. UNIQUEIDENTIFIER sütunlar nesneleri geri döndürür uuid.UUID .
False UNIQUEIDENTIFIER sütunlar büyük harfli dizeler döndürür (pyodbc ile uyumlu).

Ayrıca her bağlantı için native_uuid ayarlayabilirsiniz:

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

Note

Bu native_uuid ayar, mssql-python 1.5.0 sürümünde tanıtıldı.

Modül düzeyindeki sabitler

Sürücü, yeteneklerini tanımlayan yalnızca okunabilir DB-API 2.0 uyumluluk sabitlerini ortaya koyar. Bu sabitleri kullanarak farklı DB-API sürücülerine uyum sağlayan kod yazabilirsiniz:

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

Sabit apilevel DB-API uyum seviyesini rapor ediyor:

Değer Meaning
'2.0' Tam DB-API 2.0 uyumu.

Threadsafety

threadsafety sabiti iş parçacığı güvenliği düzeyini bildirir:

Değer Meaning
0 Threads modülü paylaşamıyor.
1 İş parçacıkları aynı modülü paylaşabilir, ancak bağlantıları paylaşamaz.
2 Thread'ler modülü ve bağlantıları paylaşabilir.
3 Threads modülü, bağlantıları ve imlecleri paylaşabilir.

mssql-python sürücüsü threadsafety = 1 kullanır; bu da şu anlama gelir:

  • Modülü iş parçacıkları arasında içe aktarabilir ve kullanabilirsin.
  • Her bağlantı aynı anda yalnızca bir thread'e ait olmalıdır.
  • Her iş parçacığı için ayrı bir bağlantı oluşturun veya bir bağlantı havuzu kullanın (varsayılan olarak etkinleştirin). Daha fazla bilgi için Bağlantı havuzlaması bölümünü inceleyin.

paramstyle

paramstyle sabiti, parametre yer tutucu biçimini gösterir:

Style Format Example
'qmark' Soru işaretleri WHERE id = ?
'numeric' Sayısal konum WHERE id = :1
'named' Adlı WHERE id = :id
'format' ANSI C printf WHERE id = %s
'pyformat' Python formatı WHERE id = %(id)s

mssql-python sürücüsü paramstyle = 'pyformat' kullanır. SQL enjeksiyonunu önlemek için her zaman adlandırılmış parametreler kullanın. Kullanıcı girdisi ile sorguları asla dize biçimlendirme veya f-dizileri ile oluşturmayın:

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

Sürüm bilgileri

Hangi sürücü sürümünün yüklü olduğuna bakın:

import mssql_python

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

Başlangıçta ayarları yapılandırın

Bağlantı kurmadan önce uygulama başlatıldığında modül yapılandırmasını bir kez ayarlayın. Değerlerin erken ayarlanması, bağlantılar arasında tutarsız davranışları önler:

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)

İplik güvenliği endişeleri

Modül ayarları globaldir ve tüm iş parçacıklarındaki tüm bağlantıları etkiler. Bağlantılar zaten açık olduktan sonra bir ayarı değiştirirseniz, mevcut bağlantılar bu değişikliği tutarlı şekilde yansıtmayabilir. İlk bağlantınızı oluşturmadan önce tüm yapılandırma değerlerini ayarlayın:

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

Bağlantı kurmadan önce ayarları yapılandırın. Bağlantılar kurulduktan sonra ayarları değiştirmek tutarsız davranışlara yol açabilir.

Bağlantıya özgü yapılandırma

Bağlantı başına bazı ayarları küresel varsayılanı değiştirmeden geçersiz kılabilirsiniz. Uygulamanızın farklı bölümleri farklı davranışlar gerektirdiğinde bağlantı bazında geçersiz kılmaları kullanın. Örneğin, bir raporlama modülü dizi UUID'lerine ihtiyaç duyarken, uygulamanın uuid.UUID geri kalanı nesneleri kullanabilir:

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

# Use the autocommit property
conn.autocommit = True