Используя данные iris, мы узнаем, как импортировать файл CSV в базу данных MySQL с помощью Python.

Предпосылки

Python 3.8.3, MySQL Workbench 8.0.22, mysql-connector-python

Для выполнения этой задачи вам потребуется:

  1. Подготовьте или идентифицируйте ваши данные
  2. Подключитесь к MySQL и создайте базу данных
  3. Создайте таблицу и импортируйте данные CSV в базу данных MySQL.

Шаг 1. Подготовьте или определите свои данные

Для начала подготовьте или определите CSV-файл, который вы хотите импортировать в базу данных MySQL. Например, я загрузил данные iris с GitHub.

import pandas as pd
irisData = pd.read_csv(‘https://github.com/Muhd-Shahid/Write-Raw-File-into-Database-Server/raw/main/iris.csv',index_col=False)
irisData.head()

Где data - разделитель запятой. Каждая строка файла CSV заканчивается символом новой строки.

Шаг 2. Подключитесь к MySQL и создайте базу данных

Теперь давайте создадим объект подключения для подключения к серверу MySQL. Конструктор connect() создает соединение с сервером MySQL и возвращает объект MySQLConnection.

import mysql.connector as msql
from mysql.connector import Error
try:
    conn = msql.connect(host='localhost', user='root',  
                        password='sql@123')
    if conn.is_connected():
        cursor = conn.cursor()
        cursor.execute("CREATE DATABASE irisDB")
        print("irisDB database is created")
except Error as e:
    print("Error while connecting to MySQL", e)

Шаг 3. Создайте таблицу и импортируйте данные CSV в таблицу MySQL

3.1. Вставка фреймов данных Pandas в базы данных с помощью INSERT

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

Мы создадим таблицу iris в базе данных irisDB и вставим записи на сервер MySQL.

try:
    conn = msql.connect(host='localhost', 
                           database='irisDB', user='root', 
                           password='sql@123')
    if conn.is_connected():
        cursor = conn.cursor()
        cursor.execute("select database();")
        record = cursor.fetchone()
        print("You're connected to database: ", record)
        cursor.execute('DROP TABLE IF EXISTS iris;')
        print('Creating table....')
        cursor.execute("CREATE TABLE iris (sepal_length FLOAT(2,1) 
                        NOT NULL, sepal_width FLOAT(2,1) NOT NULL,
                        petal_length FLOAT(2,1) NOT NULL, 
                        petal_width FLOAT(2,1),species CHAR(11)NOT 
                        NULL)")
        print("iris table is created....")
        for i,row in irisData.iterrows():
            sql = "INSERT INTO irisdb.iris VALUES (%s,%s,%s,%s,%s)"
            cursor.execute(sql, tuple(row))
            print("Record inserted")
            # the connection is not autocommitted by default, so we 
             must commit to save our changes
            conn.commit()
except Error as e:
    print("Error while connecting to MySQL", e)

3.1.1. Запросите базу данных, чтобы проверить нашу работу

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

# Execute query
sql = "SELECT * FROM iris"
cursor.execute(sql)

# Fetch all the records
result = cursor.fetchall()
for i in result:
    print(i)

3.2. Вставка фреймов данных Pandas в базу данных с помощью функции to_sql ()

# import the module
from sqlalchemy import create_engine
# create sqlalchemy engine
engine = create_engine("mysql+pymysql://{user}:{pw}@localhost/{db}"  
                      .format(user="root", pw="sql@123", 
                      db="irisdb"))
# Insert whole DataFrame into MySQL
irisData.to_sql('iris', con = engine, if_exists = 'append', chunksize = 1000,index=False)

Что тут происходит?

  • iris - это имя таблицы, в которую мы хотим вставить наш DataFrame.
  • con = engine предоставляет сведения о соединении (напомним, что мы создали engine, используя наши данные аутентификации на предыдущем шаге).
  • if_exists = 'append' проверяет, существует ли указанная нами таблица уже или нет, а затем добавляет новые данные (если они существуют) или создает новую таблицу (если нет).
  • chunksize записывает записи партиями заданного размера за раз. По умолчанию все строки будут записаны сразу.

3.2.1. Запросите базу данных, чтобы проверить нашу работу

Опять же, давайте запросим базу данных, чтобы убедиться, что наши вставленные данные были сохранены правильно.

# Execute query
sql = "SELECT * FROM iris"
cursor.execute(sql)
# Fetch all the records
result = cursor.fetchall()
for i in result:
    print(i)

# Close the connection
if (conn.is_connected()):
    cursor.close()
    conn.close()
    print(“MySQL connection is closed”)

Заключение

В этом руководстве мы обсудили, как импортировать Pandas DataFrames в базы данных MySQL, используя два разных метода, включая высокоэффективный метод to_sql().

Весь код для этой статьи доступен как Блокнот Jupyter на GitHub.

Найдите самый быстрый способ импортировать данные CSV в базу данных MySQL с помощью Python

Оставайтесь позитивными !! Оставайтесь в безопасности !! Продолжайте учиться :) :)

Спасибо за внимание! !