Jak działa pandas to_sql w języku Python? Przykład zastosowania

Jak działa pandas to_sql w języku Python? Przykład zastosowania
„`html

Jak działa pandas to_sql w języku Python? Przykład zastosowania

Pracując z biblioteką pandas w Pythonie, często zachodzi potrzeba zapisania danych do bazy SQL. Na szczęście, pandas.to_sql() to funkcja, która pozwala łatwo zapisać DataFrame wprost do tabeli w bazie danych. Dzisiaj omówię, jak działa, jakie ma opcje i pokażę przykładowe zastosowania.

Co to jest pandas.to_sql()?

Funkcja to_sql() umożliwia zapisanie zawartości DataFrame do bazy danych zgodnej z PEP 249, czyli interfejsem baz danych Python Database API (DB-API). Można jej używać do tworzenia nowych tabel, dodawania danych oraz nadpisywania istniejących tabel.

Podstawowa składnia pandas.to_sql()

Funkcja to_sql() ma prostą składnię:

df.to_sql(
    name, 
    con, 
    schema=None, 
    if_exists='fail', 
    index=True, 
    index_label=None, 
    chunksize=None, 
    dtype=None, 
    method=None
)

Najważniejsze parametry:

  • name – nazwa tabeli w bazie danych.
  • con – obiekt połączenia do bazy SQLAlchemy.
  • if_exists – określa, co zrobić jeśli tabela już istnieje:
    • 'fail' (domyślnie) – zgłoszenie błędu, jeśli tabela istnieje.
    • 'replace' – usunięcie istniejącej tabeli i utworzenie nowej.
    • 'append' – dodanie danych do istniejącej tabeli.
  • index – określa, czy indeks DataFrame ma być zapisany jako kolumna.

Przykład: Zapisywanie DataFrame do SQLite

Na początek stworzę przykładowy DataFrame i zapiszę go do bazy SQLite.

import pandas as pd
import sqlite3

# Tworzenie przykładowego DataFrame
data = {'imie': ['Anna', 'Jan', 'Kasia'],
        'wiek': [28, 35, 23]}

df = pd.DataFrame(data)

# Tworzenie połączenia z bazą SQLite
conn = sqlite3.connect('baza_danych.db')

# Zapisanie DataFrame do tabeli "osoby"
df.to_sql('osoby', conn, if_exists='replace', index=False)

# Zamknięcie połączenia
conn.close()

Co tutaj się dzieje?

  1. Tworzę DataFrame z danymi.
  2. Łączę się z bazą SQLite (lub tworzę ją, jeśli nie istnieje).
  3. Wysyłam dane do bazy przy użyciu to_sql().
  4. Parametr if_exists='replace' sprawia, że tabela zostanie nadpisana, jeśli już istnieje.

Zapisywanie danych do MySQL lub PostgreSQL

Jeśli chcę zapisać dane do MySQL lub PostgreSQL, używam SQLAlchemy do zarządzania połączeniem. W przykładzie poniżej wypełniam bazę MySQL.

from sqlalchemy import create_engine

# Tworzenie silnika bazy MySQL
engine = create_engine('mysql+pymysql://user:password@localhost/mojabaza')

# Zapisanie danych do tabeli "osoby"
df.to_sql('osoby', con=engine, if_exists='append', index=False)

Wydajność: Użycie chunksize

Jeśli mam duży zbiór danych, zapisywanie może być wolne. Można jednak poprawić wydajność, używając chunksize, który podzieli dane na mniejsze fragmenty.

df.to_sql('osoby', con=engine, if_exists='append', index=False, chunksize=1000)

Określanie typów kolumn w bazie

Domyślnie to_sql() próbuje samodzielnie dobrać typy kolumn, ale można je określić ręcznie, używając dtype:

from sqlalchemy.types import Integer, String

df.to_sql('osoby', con=engine, if_exists='replace', index=False, dtype={'imie': String(50), 'wiek': Integer})

Jeśli tabela już istnieje – co zrobić?

Opcja if_exists pozwala kontrolować, co się stanie, jeśli tabela już istnieje:

Wartość if_exists Efekt
'fail' Zwraca błąd, jeśli tabela już istnieje.
'replace' Usuwa istniejącą tabelę i tworzy nową.
'append' Dodaje nowe dane do istniejącej tabeli.

Podsumowanie

Funkcja pandas.to_sql() to bardzo wygodne narzędzie do przesyłania danych do baz SQL. Korzystając z niej, można w prosty sposób:

  • Zapisać DataFrame do bazy danych.
  • Kontrolować, czy tabela ma być tworzona, nadpisywana czy uzupełniana.
  • Optymalizować zapis dużych zbiorów danych za pomocą chunksize.
  • W pełni kontrolować typy kolumn w bazie danych.

Jeśli często pracuję z bazami danych i analizą danych w Pythonie, to_sql() jest niezastąpioną funkcją.

„` Inny ciekawy artykuł: Jak działa pandas to_excel w języku Python? Przykład zastosowania
KajoDataSpace