Python SQL Server: Массовое копирование

В этом руководстве вы узнаете, как быстро вставлять данные в таблицу SQL Server с помощью функции массового копирования.

Это руководство начинается с того места, где закончилось руководство по импорту данных из CSV-файла в таблицу SQL Server.

Чтобы быстро вставить большой объем данных в таблицу SQL Server, можно использовать функцию массового копирования. Мы покажем, как выполнить массовое копирование данных в таблицу Customers.

Выполнить массовое копирование данных клиентов

Шаг 1. Загрузите и скопируйте следующие данные customers.csv в каталог данных:

Загрузите файл customers.csv

Файл customers.csv содержит 500 записей о клиентах со всеми столбцами из таблицы Customers, включая CustomerID, FirstName, LastName, Email, PhoneNumber и Address.

Шаг 2. Создайте новый файл bulk.py в каталоге проекта:

mkdir data

Шаг 3. Добавьте следующий код в файл bulk.py:

from connect import create_connection
from utils import read_csv
def bulk_copy_customers(filename:str) -> bool:
    customers = read_csv(filename)
    if not customers:
        return False
    conn = create_connection()
    if conn is None:
        return False
    with conn:
        conn.bulk_copy('Customers',customers)
        conn.commit()
    return True   

Как это работает.

Сначала импортируйте функцию create_connection из модуля connect и функцию read_csv из модуля utils:

from connect import create_connection
from utils import read_csv

Вот более подробная информация о модулях connect и utils.

Во-вторых, определите функцию bulk_copy_customers, которая принимает имя CSV-файла как строку и возвращает логическое значение, указывающее, успешно ли выполнено массовое копирование:

def bulk_copy_customers(filename:str) -> bool:

В-третьих, считайте данные о клиентах из CSV-файла, указанного аргументом filename, и верните False, если файл клиентов пуст:

customers = read_csv(filename)
if not customers:
    return False

В-четвертых, создайте новое соединение с SQL Server, вызвав функцию create_connection, и верните False в случае сбоя соединения:

conn = create_connection()
if conn is None:
    return False

В-пятых, вызовите функцию bulk_copy объекта Connection для выполнения массового копирования:

with conn:
    conn.bulk_copy('Customers',customers)
    conn.commit()

Функция bulk_copy принимает имя таблицы и список кортежей, где каждый кортеж содержит данные, представляющие запись клиента.

Оператор with обеспечивает правильное управление объектом Connection, поэтому вам не придется закрывать его вручную.

Метод commit() навсегда применяет изменения к базе данных. Если вы не вызовете метод commit(), изменения не будут сохранены в базе данных.

Наконец, верните True из функции, чтобы указать, что массовое копирование прошло успешно:

return True

Шаг 4. Измените модуль main.py, который использует функцию bulk_copy_customers:

import logging, sys
from bulk import bulk_copy_customers 
# config logging to console
logging.basicConfig(
    stream=sys.stdout, 
    encoding='utf-8', 
    format='%(levelname)s:%(message)s',
    level=logging.DEBUG
)
bulk_copy_customers('./data/customers.csv')

Как это работает.

Сначала импортируйте logging и sys для ведения журнала:

import logging, sys

Во-вторых, импортируйте функцию bulk_copy_customers из модуля bulk:

from bulk import bulk_copy_customers

В-третьих, настройте ведение журнала для вывода сообщений на терминал:

logging.basicConfig(
    stream=sys.stdout, 
    encoding='utf-8', 
    format='%(levelname)s:%(message)s',
    level=logging.DEBUG
)

Наконец, вызовите функцию bulk_copy_customers, чтобы скопировать данные клиентов из ./data/customers.csv в таблицу Customers:

bulk_copy_customers('./data/customers.csv')

Шаг 5. Откройте терминал и запустите файл main.py:

python main.py

Проверка массовой копии

Шаг 1. Запустите SQL Server Management Studio и подключитесь к SQL Server.

Шаг 2. Выполните следующий запрос, который извлекает данные из таблицы Customers:

SELECT * FROM customers;

Выход:

python sql server pymssql массовое копирование

Загрузите исходный код проекта

Загрузите исходный код проекта

Краткое содержание

  • Используйте метод bulk_copy() объекта Connection для быстрой загрузки данных в таблицу SQL Server.
Мирослав С.

Автор статей, ИБ-специалист