Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
O driver mssql-python fornece uma Settings classe que controla o comportamento a nível de módulo. Estas definições afetam todas as ligações e operações do cursor. Configure-as uma vez no início da aplicação, antes de criar qualquer ligação.
Definições de acesso
Recuperar o objeto atual Settings e inspecionar ou modificar as suas propriedades:
import mssql_python
# Get settings object
settings = mssql_python.get_settings()
# Check current values
print(settings.lowercase)
print(settings.decimal_separator)
Configurações disponíveis
As seguintes definições controlam como o driver devolve os dados e formata os resultados.
em minúsculas
A lowercase definição controla se os nomes das colunas em cursor.description aparecem em minúsculas. Ative esta definição quando a sua aplicação acede às colunas pelo nome e quiser evitar incompatibilidades entre maiúsculas e minúsculas. Frameworks web como Flask e FastAPI frequentemente convertem linhas em dicionários, o que torna a consistência das maiúsculas e minúsculas importantes:
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', ...)
| Valor | Descrição |
|---|---|
False |
Predefinição. Os nomes das colunas preservam o revestimento original. |
True |
Os nomes das colunas em cursor.description são convertidos para minúsculas. |
Separador decimal
O driver fornece funções ao nível do módulo para controlar o separador decimal para conversões numéricas. Mude esta definição apenas se a sua instância do SQL Server usar um local com vírgula como separador decimal, como locais franceses ou alemães. A maioria das aplicações não precisa de alterar esta definição:
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(",")
Para mais informações sobre o tratamento decimal, consulte Mapeamentos de tipos de dados.
native_uuid
A definição native_uuid controla se as colunas UNIQUEIDENTIFIER são devolvidas como objetos Python uuid.UUID ou como cadeias de caracteres em maiúsculas compatíveis com pyodbc. Esta configuração é útil para equipas que estão a migrar do pyodbc e que dependem de valores UUID em formato de cadeia de caracteres:
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
| Valor | Descrição |
|---|---|
True |
Predefinição.
UNIQUEIDENTIFIER as colunas retornam uuid.UUID objetos. |
False |
UNIQUEIDENTIFIER colunas retornam cadeias de caracteres em maiúsculas (compatíveis com pyodbc). |
Também pode definir native_uuid por ligação:
# Override for a specific connection
conn = mssql_python.connect(connection_string, native_uuid=False)
Note
A native_uuid configuração foi introduzida na versão 1.5.0 do mssql-python.
Constantes ao nível do módulo
O driver expõe constantes só de leitura de conformidade com a DB-API 2.0 que descrevem as suas capacidades. Use estas constantes para escrever código que se adapte a diferentes DB-API drivers:
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'
nível da API
A constante apilevel indica o nível de conformidade com a DB-API:
| Valor | Meaning |
|---|---|
'2.0' |
Conformidade total com a DB-API 2.0. |
Segurança da rosca
A constante threadsafety indica o nível de segurança das threads:
| Valor | Meaning |
|---|---|
0 |
Os Threads não conseguem partilhar o módulo. |
1 |
Os threads podem partilhar o módulo, mas não as ligações. |
2 |
Os threads podem partilhar o módulo e as ligações. |
3 |
Os threads podem partilhar o módulo, as ligações e os cursores. |
O driver mssql-python usa threadsafety = 1, o que significa:
- Podes importar e usar o módulo entre threads.
- Cada conexão deve pertencer a uma única thread de cada vez.
- Crie uma ligação separada por thread, ou use um pool de ligações (ativado por defeito). Para mais informações, consulte agrupamento de ligações.
paramstyle
A constante paramstyle indica o formato do marcador de posição do parâmetro:
| Style | Format | Exemplo |
|---|---|---|
'qmark' |
Pontos de interrogação | WHERE id = ? |
'numeric' |
Posição numérica | WHERE id = :1 |
'named' |
Nomeado | WHERE id = :id |
'format' |
ANSI C printf | WHERE id = %s |
'pyformat' |
Formato Python | WHERE id = %(id)s |
O driver mssql-python utiliza paramstyle = 'pyformat'. Use sempre parâmetros nomeados para evitar a injeção de SQL. Nunca construa consultas a partir da entrada do utilizador usando formatação de strings ou f-strings:
# 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}
)
Informações sobre a versão
Verifique qual a versão do driver instalada:
import mssql_python
# Driver version
print(mssql_python.__version__) # e.g., '1.5.0'
Configurar definições no arranque
Define a configuração do módulo uma vez no início da aplicação, antes de criares qualquer ligação. Definir valores cedo previne comportamentos inconsistentes entre ligações:
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)
Considerações sobre a segurança da rosca
As definições dos módulos são globais e afetam todas as ligações em todas as threads. Se mudares uma definição depois de as ligações já estarem abertas, as ligações existentes podem não refletir a alteração de forma consistente. Defina todos os valores de configuração antes de criar a sua primeira ligação:
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()
Importante
Configura as definições antes de criares ligações. Mudar as definições após a criação das ligações pode levar a comportamentos inconsistentes.
Configuração específica de ligação
Podes sobrescrever algumas definições por ligação sem alterar o padrão global. Utilize substituições por ligação quando diferentes partes da sua aplicação precisarem de comportamentos diferentes. Por exemplo, um módulo de reporte pode precisar de UUIDs de string enquanto o resto da aplicação usa uuid.UUID objetos:
# Per-connection native_uuid override
conn = mssql_python.connect(connection_string, native_uuid=False)
# Use the autocommit property
conn.autocommit = True