Compartir a través de


Inicio rápido: Conexión con el controlador pyodbc para Python

En este inicio rápido, conectará un script de Python a una base de datos que ha creado y cargado con datos de ejemplo. Use el pyodbc controlador para Python para conectarse a la base de datos y realizar operaciones básicas, como leer y escribir datos.

documentación de pyodbc | código fuente de pyodbc | Paquete (PyPi)

Prerrequisitos

  • Python 3

    • Si aún no tiene Python, instale el administrador de paquetes de Python runtime y el Índice de paquetes de Python (PyPI) desde python.org.

    • ¿Prefiere no usar su propio entorno? Abra como un devcontainer mediante GitHub Codespaces.

  • Paquete pyodbc de PyPI.

  • Una base de datos en SQL Server, Azure SQL Database o SQL Database en Fabric con el AdventureWorks2022 esquema de ejemplo y una cadena de conexión válida.

Instalación

Siga estos pasos para configurar el entorno de desarrollo para desarrollar una aplicación mediante el pyodbc controlador de Python.

Nota:

Este controlador usa el protocolo TDS , que está habilitado de forma predeterminada en SQL Server, SQL Database en Fabric y Azure SQL Database. No se requiere ninguna configuración adicional.

Instale el paquete pyodbc

Obtenga el paquete de pyodbc de PyPI.

  1. Abra un símbolo del sistema en un directorio de archivos vacío.

  2. Instale el paquete pyodbc.

    pip install pyodbc
    

Compruebe los paquetes instalados

Puede usar la herramienta de línea de comandos PyPI para comprobar que los paquetes previstos están instalados.

  1. Compruebe la lista de paquetes instalados con pip list.

    pip list
    

Creación de una base de datos SQL

Esta guía de inicio rápido requiere el esquema AdventureWorks2022 Lightweight en Microsoft SQL Server, en Fabric SQL Database o Azure SQL Database.

Ejecución del código

Crear un nuevo archivo

  1. Cree un nuevo archivo llamado app.py.

  2. Agregue una docstring de módulo.

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

    from os import getenv
    from dotenv import load_dotenv
    from pyodbc import connect
    
  4. Use la función pyodbc.connect para conectarse a una base de datos SQL.

    load_dotenv()
    conn = connect(getenv("SQL_CONNECTION_STRING"))
    
  5. En el directorio actual, cree un nuevo archivo denominado *.env.

  6. En el *.env archivo, agregue una entrada para la cadena de conexión denominada SQL_CONNECTION_STRING. Reemplace el ejemplo aquí por el valor real de la cadena de conexión.

    SQL_CONNECTION_STRING="Driver={ODBC Driver 18 for SQL Server};Server=<server_name>;Database={<database_name>};Encrypt=yes;TrustServerCertificate=no;Authentication=ActiveDirectoryInteractive"
    

    Sugerencia

    La cadena de conexión que se usa aquí depende en gran medida del tipo de base de datos SQL a la que se conecta. Para obtener más información sobre las cadenas de conexión y su sintaxis, consulte referencia de sintaxis de cadena de conexión.

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.

    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.

    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.

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

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

    python app.py
    

    Este es el resultado esperado.

    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

Ejecute una instrucción INSERT de forma segura y pase parámetros. Pasar parámetros como valores protege la aplicación frente a ataques por inyección de CÓDIGO SQL .

  1. Agregue una importación para randrange desde la random biblioteca a la parte superior de app.py.

    from random import randrange
    
  2. Al final de app.py agregar código para generar un número de producto aleatorio.

    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.

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

    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.

    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.

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

    python app.py
    

    Este es el resultado esperado.

    Inserted Product ID : 1001
    

Paso siguiente

Visite el repositorio de pyodbc GitHub del controlador para obtener más ejemplos, para contribuir a ideas o notificar problemas.