Passaggio 3: Modello di verifica per la connessione a SQL con pymssql

Questo modello di verifica di esempio usa pymssql 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

  • Python 3
    • Se ancora non si dispone di Python, installare Runtime Python e Gestione pacchetti di Python Package Index (PyPI) da python.org.
    • È preferibile non usare il proprio ambiente? Aprire come devcontainer usando GitHub Codespaces.
      • Open in GitHub Codespaces.
  • pymssql pacchetto da PyPI.
  • Un database SQL e le credenziali.

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.

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

    import pymssql
    
  4. Usare Funzioni pymssql.connect per connettersi al database SQL di Azure

    conn = pymssql.connect(
        server='<server-address>',
        user='<username>',
        password='<password>',
        database='<database-name>',
        as_dict=True
    )  
    

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.

    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.

    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.

    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.

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

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

    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.

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

    cursor.execute(
        SQL_STATEMENT,
        (
            f'Example Product {productNumber}', 
            f'EXAMPLE-{productNumber}', 
            100,
            200
        )
    )
    
  5. Recuperare il singolo risultato usando cursor.fetchone, stampare l'identificatore univoco del risultato e quindi eseguire il commit dell'operazione come transazione usando connection.commit.

    result = cursor.fetchone()
    print(f"Inserted Product ID : {result['ProductID']}")
    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.

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

    python app.py
    
    Inserted Product ID : 1001
    

Passaggi successivi