Leggi in inglese

Condividi tramite


Passaggio 3: Modello di verifica per la connessione a SQL tramite pyodbc

Questo modello di verifica di esempio usa pyodbc per connettersi a un database SQL. In questo esempio si presuppone l’uso del database di esempio AdventureWorksLT.

Nota

Questo esempio deve essere considerato solo un modello di verifica. Il codice di esempio è semplificato per maggiore chiarezza e non rappresenta necessariamente le procedure consigliate da Microsoft.

Prerequisiti

Connettersi ed eseguire query sui dati

Connettere a un database usando le proprie credenziali.

  1. Creare un file denominato app.py.

  2. Aggiungere una docstring del modulo.

    Python
    """
    Connects to a SQL database using pyodbc
    """
    
  3. Importare il pacchetto pyodbc.

    Python
    import pyodbc
    
  4. Creare variabili per le credenziali di connessione.

    Python
    SERVER = '<server-address>'
    DATABASE = '<database-name>'
    USERNAME = '<username>'
    PASSWORD = '<password>'
    
  5. Creare una variabile stringa di connessione usando l'interpolazione di stringhe.

    Python
    connectionString = f'DRIVER={{ODBC Driver 18 for SQL Server}};SERVER={SERVER};DATABASE={DATABASE};UID={USERNAME};PWD={PASSWORD}'
    
  6. Usare la pyodbc.connect funzione per connettersi a un database SQL.

    Python
    conn = pyodbc.connect(connectionString) 
    

Eseguire una query

Usare una stringa di query SQL per eseguire una query e analizzare i risultati.

  1. Creare una variabile per la stringa di query SQL.

    Python
    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;
    """
    
  2. Utilizzare cursor.execute per riprendere un set di risultati da una query sul database.

    Python
    cursor = conn.cursor()
    cursor.execute(SQL_QUERY)
    

    Nota

    Questa funzione accetta essenzialmente qualsiasi query e restituisce un set di risultati su cui è possibile eseguire l'iterazione usando cursor.fetchone().

  3. Usare cursor.fetchall con un ciclo foreach per ottenere tutti i record dal database. Stampare i record.

    Python
    records = cursor.fetchall()
    for r in records:
        print(f"{r.CustomerID}\t{r.OrderCount}\t{r.CompanyName}")
    
  4. Salva il file app.py.

  5. Aprire un terminale e testare l'applicazione.

    Bash
    python app.py
    
    Output
    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

Questo esempio spiega come eseguire in modo sicuro un'istruzione INSERT e passare i parametri. Il passaggio di parametri come valori protegge l'applicazione dagli attacchi SQL injection.

  1. Importa randrange dalla libreria random.

    Python
    from random import randrange
    
  2. Generare un numero di prodotto casuale.

    Python
    productNumber = randrange(1000)
    

    Suggerimento

    La generazione di un numero di prodotto casuale garantisce la possibilità di eseguire questo esempio più volte.

  3. Creare una stringa di istruzione SQL.

    Python
    SQL_STATEMENT = """
    INSERT SalesLT.Product (
    Name, 
    ProductNumber, 
    StandardCost, 
    ListPrice, 
    SellStartDate
    ) OUTPUT INSERTED.ProductID 
    VALUES (?, ?, ?, ?, CURRENT_TIMESTAMP)
    """
    
  4. Eseguire l'istruzione con cursor.execute.

    Python
    cursor.execute(
        SQL_STATEMENT,
        f'Example Product {productNumber}', 
        f'EXAMPLE-{productNumber}', 
        100,
        200
    )
    
  5. 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 usando connection.commit.

    Python
    resultId = cursor.fetchval()
    print(f"Inserted Product ID : {resultId}")
    conn.commit()
    

    Suggerimento

    In alternativa, è possibile usare connection.rollback per eseguire il ripristino dello stato precedente della transazione.

  6. Chiudere il cursore e la connessione usando cursor.close e connection.close.

    Python
    cursor.close()
    conn.close()
    
  7. Salvare il file app.py e testare nuovamente l'applicazione

    Bash
    python app.py
    
    Output
    Inserted Product ID : 1001
    

Passaggi successivi