Pandas SQLAlchemy

Fariba Laiq 15 Februar 2024
  1. SQLAlchemy-ORM
  2. Konvertieren Sie ein SQLAlchemy-ORM in einen DataFrame
Pandas SQLAlchemy

In diesem Artikel werden wir die allgemeine Definition von SQLAlchemy ORM durchgehen, wie es mit einem Pandas DataFrame verglichen wird und wie wir ein SQLAlchemy ORM-Objekt in einen Pandas DataFrame konvertieren können. Wir gehen jedoch davon aus, dass Sie bereits damit vertraut sind, wie ein pandas DataFrame und eine relationale Datenbank für diesen Artikel eingerichtet werden.

SQLAlchemy-ORM

SQLAlchemy ist ein Modul, das dabei hilft, die Kommunikationserfahrung zwischen einem Python-Skript und der mit dem Skript verbundenen Datenbank zu verbessern. Dieses Modul wird normalerweise als ORM- oder objektrelationales Mapping-Tool verwendet.

Ein ORM “übersetzt” im Wesentlichen die Klassen in einem Python-Skript. Mit ORMs können wir einfache SQL-Abfragen schreiben, um datenbankbezogene Aktionen auszuführen.

Durch ein ORM können die Klassen in einem Python-Skript in eine SQL-Tabelle und die Funktionen in Abfragen umgewandelt werden. Daher wird SQLAlchemy oft als Brücke zwischen einem Python-Skript und einer relationalen Datenbank bezeichnet.

Konvertieren Sie ein SQLAlchemy-ORM in einen DataFrame

Diese Funktionen lesen die SQL-Abfrage oder Tabelle in das Datenrahmenobjekt ein. Die Funktion read_sql() delegiert den Prozess an die Funktionen read_sql_query() oder read_sql_table(), je nach den Parametern, die der Funktion zur Verfügung gestellt werden.

Hier sind einige der Parameter, die typischerweise in der Funktion read_sql() verwendet werden.

Parameter Beschreibung
Tabellenname (Zeichenfolge) Wie der Name schon sagt, ist dies der Name der Datenbanktabelle.
con (Zeichenfolge) Enthält normalerweise den Datenverbindungs-URI.
schema (String) Dieser Parameter enthält den Datenbankschemanamen, der abgefragt werden soll. Wenn es kein Schema für die Datenbank gibt, können wir diesen Parameter auf default setzen, dessen Wert auf None gesetzt wird.
index_col (String/Liste von Strings) Dies sind die Indizes oder Spalten. Diese sind optional und ihr Standardwert None kann verwendet werden.
coerce_float (bool) Dieser Parameter konvertiert Nicht-String-Werte in Fließkommawerte. Die Voreinstellung für diesen Parameter ist True.
parse_dates (Liste/Diktat) Dies ist die Liste der Spaltennamen, die als Daten geparst werden können. Ihr Standardwert ist auf Keine eingestellt.
Spalten (Liste) Dieser Parameter ist eine Liste von Spaltennamen, die aus einer Datenbanktabelle ausgewählt werden sollen. Der Standardwert für diesen Parameter ist auf None eingestellt.
Stückgröße (int) Dieser Parameter ist die Anzahl der Zeilen für jeden Chunk. Es wird normalerweise verwendet, um eine große Datenmenge gleichzeitig einzugeben. Wenn es nicht gesetzt werden muss, können wir es auf den Standardwert setzen, der auf None gesetzt ist.
dtype (Datentypname) Dieser Parameter kann ein einfacher Datentypname, int, bool usw. oder ein Wörterbuch von Spalten mit den angegebenen Datentypen sein.

Die Syntax für all diese Methoden:

pandas.read_sql_query(
    sql,
    con,
    index_col=None,
    coerce_float=True,
    params=None,
    parse_dates=None,
    chunksize=None,
    dtype=None,
)

Normalerweise verwenden wir in Python-Skripten diese viel direktere und vereinfachte Methode, um in eine SQL-Datenbank einzulesen:

data_frame_obj = pd.read_sql(query.statement, db_engine)

Diese obige Codezeile liest die in unserem Python-Skript definierte Abfrage und liest sie in unser Dataframe-Objekt ein.

Schauen wir uns dieses Beispielskript an, um besser zu verstehen, wie wir dies anwenden können.

import pandas
import sqlalchemy as db
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import sessionmaker

Base = declarative_base()
engine = db.create_engine(
    "mysql+pymysql:\
//root:@localhost/jobs"
)
Session = sessionmaker(bind=engine)
session = Session()


class Jobs(Base):
    __tablename__ = "jobs"
    job_id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(50))
    description = db.Column(db.String(50))
    status = db.Column(db.String(10))


rows = [
    Jobs(job_id=1, name="add", description="add data to database", status="pending"),
    Jobs(
        job_id=2, name="view", description="view data from database", status="pending"
    ),
    Jobs(
        job_id=3,
        name="search",
        description="search data from database",
        status="pending",
    ),
]
dataFrame = pandas.DataFrame([vars(row) for row in rows])
dataFrame.to_sql("jobs", engine, if_exists="replace")
jobs_df = pandas.read_sql_query(sql=session.query(Jobs).statement, con=engine)
print(jobs_df)

Um dieses Skript erfolgreich auszuführen, müssen Sie sicherstellen, dass die folgenden Bibliotheken installiert sind.

  • Pandas
  • SQLAlchemy
  • PyMySQL
  • Hafenarbeiter

Sobald Sie alle diese Bibliotheken eingerichtet haben, führen Sie den folgenden Befehl im Terminal Ihrer Wahl aus, um Ihren Docker einzurichten:

docker run --name mysql-db -e MYSQL_ALLOW_EMPTY_PASSWORD=yes -p 3306:3306 -d mysql:5.6

Als nächstes können wir unseren Container mit diesem Befehl eingeben, um die Datenbank zu erstellen:

docker exec -it mysql-db mysql

Wir führen die Datenbankerstellungsabfrage wie folgt aus:

create database jobs;

Nachdem unsere Umgebung eingerichtet ist, können wir den Container verlassen und unser Python-Skript ausführen, um die folgenden Ergebnisse zu erhalten.

Ausgang:

Konvertieren Sie SQLAlchemy ORM in einen Pandas-Datenrahmen

Das bedeutet, dass wir unser SQLAlchemy-ORM erfolgreich in einen Pandas-Datenrahmen konvertiert haben.

Fariba Laiq avatar Fariba Laiq avatar

I am Fariba Laiq from Pakistan. An android app developer, technical content writer, and coding instructor. Writing has always been one of my passions. I love to learn, implement and convey my knowledge to others.

LinkedIn

Verwandter Artikel - Pandas SQL