Leer en inglés

Compartir a través de


Paso 3: Prueba de concepto de la conexión a SQL con pyodbc

Esta prueba de concepto de ejemplo usa pyodbc para conectarse a una base de datos SQL. En este ejemplo se supone que usa la base de datos de ejemplo AdventureWorksLT.

Nota

Este ejemplo solo debe considerarse una prueba de concepto. El código de ejemplo se simplifica para mayor claridad y no representa necesariamente los procedimientos recomendados por Microsoft.

Requisitos previos

Conexión y consulta de datos

Conéctese a una base de datos con sus credenciales.

  1. Cree un nuevo archivo llamado app.py.

  2. Agregue una docstring de módulo.

    Python
    """
    Connects to a SQL database using pyodbc
    """
    
  3. Importe el paquete pyodbc.

    Python
    import pyodbc
    
  4. Cree variables para las credenciales de conexión.

    Python
    SERVER = '<server-address>'
    DATABASE = '<database-name>'
    USERNAME = '<username>'
    PASSWORD = '<password>'
    
  5. Cree una variable de cadena de conexión mediante la interpolación de cadenas.

    Python
    connectionString = f'DRIVER={{ODBC Driver 18 for SQL Server}};SERVER={SERVER};DATABASE={DATABASE};UID={USERNAME};PWD={PASSWORD}'
    
  6. Use la pyodbc.connect función para conectarse a una base de datos SQL.

    Python
    conn = pyodbc.connect(connectionString) 
    

Ejecutar una consulta

Use una cadena de consulta SQL para ejecutar una consulta y analizar los resultados.

  1. Cree una variable para la cadena de consulta 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. Use cursor.execute para recuperar un conjunto de resultados de una consulta en la base de datos.

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

    Nota

    Esta función acepta cualquier consulta y devuelve un conjunto de resultados que se puede iterar mediante el uso de cursor.fetchone().

  3. Use cursor.fetchall con un loop foreach para obtener todos los registros de la base de datos. A continuación, imprima los registros.

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

  5. Abra un terminal y pruebe la aplicación.

    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
    

Inserte una fila como transacción

En este ejemplo, se ejecuta una sentencia INSERT de forma segura y se pasan parámetros. El paso de parámetros como valores protege la aplicación del ataque por inyección de código SQL.

  1. Importe randrange desde la biblioteca random.

    Python
    from random import randrange
    
  2. Genere un número de producto aleatorio.

    Python
    productNumber = randrange(1000)
    

    Sugerencia

    La generación de un número de producto aleatorio aquí garantiza que puede ejecutar este ejemplo varias veces.

  3. Cree una cadena de instrucción SQL.

    Python
    SQL_STATEMENT = """
    INSERT SalesLT.Product (
    Name, 
    ProductNumber, 
    StandardCost, 
    ListPrice, 
    SellStartDate
    ) OUTPUT INSERTED.ProductID 
    VALUES (?, ?, ?, ?, CURRENT_TIMESTAMP)
    """
    
  4. Ejecute la instrucción mediante cursor.execute.

    Python
    cursor.execute(
        SQL_STATEMENT,
        f'Example Product {productNumber}', 
        f'EXAMPLE-{productNumber}', 
        100,
        200
    )
    
  5. Capture la primera columna del único resultado mediante cursor.fetchval, imprima el identificador único del resultado y, a continuación, confirme la operación como una transacción mediante connection.commit.

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

    Sugerencia

    Opcionalmente, puede usar connection.rollback para revertir la transacción.

  6. Cierre el cursor y la conexión mediante cursor.close y connection.close.

    Python
    cursor.close()
    conn.close()
    
  7. Guarde el archivo app.py y vuelva a probar la aplicación.

    Bash
    python app.py
    
    Output
    Inserted Product ID : 1001
    

Pasos siguientes