Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
In questa guida introduttiva si connette uno script Python a un database creato e caricato con dati di esempio. Usare il pyodbc driver per Python per connettersi al database ed eseguire operazioni di base, ad esempio la lettura e la scrittura di dati.
documentazione di pyodbc | codice sorgente di pyodbc | Pacchetto (PyPi)
Prerequisiti
Python 3
Se Python non è già disponibile, installare la gestione pacchetti Python runtime e Python Package Index (PyPI) da python.org.
Preferisce non usare il proprio ambiente? Apri come devcontainer utilizzando GitHub Codespaces.
pyodbcpacchetto da PyPI.Un database su SQL Server, Azure SQL Database o un database SQL in Fabric con lo
AdventureWorks2025schema di esempio e una stringa di connessione valida.
Configurazione
Seguire questa procedura per configurare l'ambiente di sviluppo per sviluppare un'applicazione usando il pyodbc driver Python.
Annotazioni
Questo driver usa il protocollo TDS (Tabular Data Stream), che è abilitato per impostazione predefinita in SQL Server, nel database SQL in Fabric e nel database SQL di Azure. Non è necessaria alcuna configurazione aggiuntiva.
Installare il pacchetto pyodbc
Ottieni il pyodbc pacchetto da PyPI.
Apri un prompt dei comandi in una directory vuota.
Installare il pacchetto
pyodbc.pip install pyodbc
Installare il pacchetto python-dotenv
Ottieni il python-dotenv da PyPI.
Nella stessa directory installare il
python-dotenvpacchetto.pip install python-dotenv
Controllare i pacchetti installati
È possibile usare lo strumento da riga di comando PyPI per verificare che i pacchetti previsti siano installati.
Controllare l'elenco dei pacchetti installati con
pip list.pip list
Creare un database SQL
Questa guida introduttiva richiede lo schema AdventureWorks2025 Lightweight, su Microsoft SQL Server, nel database SQL di Fabric o nel database SQL di Azure.
Creare un database SQL in pochi minuti usando il portale di Azure
Copiare la ODBC stringa di connessione dalla scheda Stringhe di connessione.
Eseguire il codice
Creare un nuovo file
Creare un file denominato
app.py.Aggiungere una docstring al modulo.
""" Connects to a SQL database using pyodbc """Importare il pacchetto
pyodbc.from os import getenv from dotenv import load_dotenv from pyodbc import connectUsare la
pyodbc.connectfunzione per connettersi a un database SQL.load_dotenv() conn = connect(getenv("SQL_CONNECTION_STRING"))Nella directory corrente creare un nuovo file denominato
.env.All'interno del
.envfile aggiungere una voce per la stringa di connessione denominataSQL_CONNECTION_STRING. Sostituire l'esempio qui con il valore effettivo della stringa di connessione.SQL_CONNECTION_STRING="Driver={ODBC Driver 18 for SQL Server};Server=<server_name>;Database={<database_name>};Encrypt=yes;TrustServerCertificate=no;Authentication=ActiveDirectoryInteractive"Suggerimento
La stringa di connessione usata qui dipende in gran parte dal tipo di database SQL a cui ci si connette. Se ci si connette a un database SQL di Azure o a un database SQL in Fabric, usare la stringa di connessione ODBC dalla scheda Stringhe di connessione. Potrebbe essere necessario modificare il tipo di autenticazione a seconda dello scenario. Per altre informazioni sulle stringhe di connessione e sulla relativa sintassi, vedere informazioni di riferimento sulla sintassi delle stringhe di connessione.
Eseguire una query
Usare una stringa di query SQL per eseguire una query e analizzare i risultati.
Creare una variabile per la stringa di query SQL.
SQL_QUERY = """ SELECT TOP 5 c.CustomerID, c.CompanyName, COUNT(soh.SalesOrderID) AS OrderCount FROM SalesLT.Customer AS c LEFT OUTER JOIN SalesLT.SalesOrderHeader AS soh ON c.CustomerID = soh.CustomerID GROUP BY c.CustomerID, c.CompanyName ORDER BY OrderCount DESC; """Utilizzare
cursor.executeper recuperare un set di risultati da una query sul database.cursor = conn.cursor() cursor.execute(SQL_QUERY)Annotazioni
Questa funzione accetta essenzialmente qualsiasi query e restituisce un set di risultati, che può essere iterato con l'uso di cursor.fetchone().
Usare
cursor.fetchallcon unforeachciclo per ottenere tutti i record dal database. Stampare quindi i record.records = cursor.fetchall() for r in records: print(f"{r.CustomerID}\t{r.OrderCount}\t{r.CompanyName}")Salvare il
app.pyfile.Aprire un terminale e testare l'applicazione.
python app.pyEcco l'output previsto.
29485 1 Professional Sales and Service 29531 1 Remarkable Bike Store 29546 1 Bulk Discount Store 29568 1 Coalition Bike Company 29584 1 Futuristic Bikes
Inserire una riga come transazione
Eseguire un'istruzione INSERT in modo sicuro e passare i parametri. Il passaggio di parametri come valori protegge l'applicazione da attacchi SQL injection .
Aggiungere un'importazione per
randrangedella libreriarandomall'inizio diapp.py.from random import randrangeAlla fine di
app.pyaggiungere codice per generare un numero di prodotto casuale.productNumber = randrange(1000)Suggerimento
La generazione di un numero di prodotto casuale qui garantisce che sia possibile eseguire questo esempio più volte.
Creare una stringa di istruzione SQL.
SQL_STATEMENT = """ INSERT SalesLT.Product ( Name, ProductNumber, StandardCost, ListPrice, SellStartDate ) OUTPUT INSERTED.ProductID VALUES (?, ?, ?, ?, CURRENT_TIMESTAMP) """Eseguire l'istruzione usando
cursor.execute.cursor.execute( SQL_STATEMENT, ( f'Example Product {productNumber}', f'EXAMPLE-{productNumber}', 100, 200 ) )Recuperare la prima colonna del singolo risultato usando
cursor.fetchval, stampare l'identificatore univoco del risultato e quindi eseguire il commit dell'operazione come transazione usandoconnection.commit.resultId = cursor.fetchval() print(f"Inserted Product ID : {resultId}") conn.commit()Suggerimento
Facoltativamente, è possibile usare
connection.rollbackper eseguire il rollback della transazione.Chiudere il cursore e la connessione usando
cursor.closeeconnection.close.cursor.close() conn.close()Salvare il
app.pyfile e testare di nuovo l'applicazione.python app.pyEcco l'output previsto.
Inserted Product ID : 1001
Passo successivo
Per altri esempi, visitare il pyodbc repository GitHub del driver per contribuire a idee o segnalare problemi.