Поделиться через


Быстрый старт: Подключение с драйвером pyodbc для работы с Python

В этом кратком руководстве описано, как подключить скрипт Python к созданной и загруженной базе данных с примерами данных. pyodbc Драйвер для Python используется для подключения к базе данных и выполнения основных операций, таких как чтение и запись данных.

Документация по pyodbc | Исходный код | Пакет (PyPi) pyodbc

Предпосылки

  • Python 3

    • Если у вас еще нет Python, установите среду выполнения Python и менеджер пакетов Python Package Index (PyPI) из python.org.

    • Предпочитаете обходиться без использования собственной среды? Откройте в качестве контейнера для разработки с помощью GitHub Codespaces.

  • pyodbc пакет от PyPI.

  • База данных в SQL Server, Базе данных SQL Azure или базе данных SQL в Fabric с примером AdventureWorks2022 схемы и допустимой строкой подключения.

Настройка

Выполните следующие действия, чтобы настроить среду разработки для разработки приложения с помощью pyodbc драйвера Python.

Замечание

Этот драйвер использует протокол TDS , который включен по умолчанию в SQL Server, базе данных SQL в Fabric и Базе данных SQL Azure. Дополнительная конфигурация не требуется.

Установка пакета pyodbc

pyodbc Получите пакет из PyPI.

  1. Откройте командную строку в пустом каталоге.

  2. Установите пакет pyodbc.

    pip install pyodbc
    

Проверка установленных пакетов

Средство командной строки PyPI можно использовать для проверки установки предполагаемых пакетов.

  1. Проверьте список установленных пакетов с помощью pip list.

    pip list
    

Создание базы данных SQL

В этом кратком руководстве требуется облегченная схема AdventureWorks2022 в Microsoft SQL Server, в базе данных SQL в среде Fabric или в Базе данных SQL Azure.

Запустите код

Создание нового файла

  1. Создайте файл с именем app.py.

  2. Добавьте строку документации для модуля.

    """
    Connects to a SQL database using pyodbc
    """
    
  3. Импортируйте пакет pyodbc.

    from os import getenv
    from dotenv import load_dotenv
    from pyodbc import connect
    
  4. Используйте функцию pyodbc.connect для подключения к базе данных SQL.

    load_dotenv()
    conn = connect(getenv("SQL_CONNECTION_STRING"))
    
  5. В текущем каталоге создайте новый файл с именем *.env.

  6. В файле *.env добавьте запись для строки подключения с именем SQL_CONNECTION_STRING. Замените пример фактическим значением строки подключения.

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

    Подсказка

    Строка подключения, используемая здесь, в значительной степени зависит от типа базы данных SQL, к которой вы подключаетесь. Дополнительные сведения о строках подключения и их синтаксисе см. в справочнике по синтаксису строки подключения.

Выполнение запроса

Используйте строку SQL-запроса для выполнения запроса и анализа результатов.

  1. Создайте переменную для строки запроса 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. Используется cursor.execute для извлечения результирующих наборов из запроса к базе данных.

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

    Замечание

    Эта функция по сути принимает любой запрос и возвращает результирующий набор, который можно переитерировать с помощью cursor.fetchone().

  3. Используйте cursor.fetchall с циклом foreach для получения всех записей из базы данных. Затем распечатайте записи.

    records = cursor.fetchall()
    for r in records:
        print(f"{r.CustomerID}\t{r.OrderCount}\t{r.CompanyName}")
    
  4. Сохранитеapp.py файл.

  5. Откройте терминал и протестируйте приложение.

    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
    

Вставить строку как транзакцию

Безопасно выполните инструкцию INSERT и передайте параметры. Передача параметров в качестве значений защищает приложение от атак внедрения SQL .

  1. Добавьте импорт randrange из библиотеки random в начало app.py.

    from random import randrange
    
  2. В конце app.py добавьте код для генерации случайного номера продукта.

    productNumber = randrange(1000)
    

    Подсказка

    Создание случайного номера продукта здесь гарантирует, что этот пример можно запустить несколько раз.

  3. Создайте строку инструкции SQL.

    SQL_STATEMENT = """
    INSERT SalesLT.Product (
    Name,
    ProductNumber,
    StandardCost,
    ListPrice,
    SellStartDate
    ) OUTPUT INSERTED.ProductID
    VALUES (?, ?, ?, ?, CURRENT_TIMESTAMP)
    """
    
  4. Выполните инструкцию с помощью cursor.execute.

    cursor.execute(
        SQL_STATEMENT,
        (
            f'Example Product {productNumber}',
            f'EXAMPLE-{productNumber}',
            100,
            200
        )
    )
    
  5. Извлеките первый столбец одного результата с помощью cursor.fetchval, выведите уникальный идентификатор, а затем зафиксируйте операцию как транзакцию с помощью connection.commit.

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

    Подсказка

    При необходимости можно использовать connection.rollback для отката транзакции.

  6. Закройте курсор и подключение с помощью cursor.close и connection.close.

    cursor.close()
    conn.close()
    
  7. Сохранитеapp.py файл и снова протестируйте приложение.

    python app.py
    

    Ниже приведены ожидаемые выходные данные.

    Inserted Product ID : 1001
    

Следующий шаг

Посетите репозиторий pyodbc драйверов GitHub, чтобы получить дополнительные примеры, чтобы внести идеи или сообщить о проблемах.