Pandas read_sql_query in Python

Manav Narula 21 Juni 2023
Pandas read_sql_query in Python

SQL ist eine Programmiersprache zum Erstellen und Verwalten von Datenbanken in einem relationalen Datenbankverwaltungssystem. Wir können viele Datenbankanwendungen mit Python erstellen.

Mehrere Bibliotheken wie SQLite, SQLAlchemy und mehr können verwendet werden, um Verbindungen zu SQL-Anwendungen herzustellen, die auf dem Gerät installiert sind.

In Python können wir Tabellen mit der Bibliothek pandas als DataFrame-Objekte speichern. Wir können mit dieser Bibliothek auch mit SQL-Abfragen arbeiten.

Dieses Tutorial zeigt, wie man Ergebnisse aus einer SQL-Abfrage mit der Funktion pandas.read_sql_query() liest.

Python-Pandas read_sql_query

Mit der Funktion pandas.read_sql_query() können wir das Ergebnis einer Abfrage direkt in einen DataFrame einlesen. Wir müssen eine Verbindung zu einer SQL-Datenbank herstellen, um diese Funktion nutzen zu können.

In unserem Beispiel verwenden wir die Bibliothek sqlite3. Wir können diese Bibliothek verwenden, um mit der SQLite-Datenbankanwendung zu arbeiten.

Die Methode connect() wird verwendet, um eine Verbindung herzustellen, und der Name der Datenbank wird in dieser Funktion bereitgestellt. Wir erstellen die Verbindung und führen die SELECT-Anweisung aus, um Daten in den DataFrame zu laden.

Siehe Code unten.

import pandas as pd
import sqlite3

connection = sqlite3.connect("delftstack.db")
crsr = connection.cursor()
ct_sql = """CREATE TABLE data3 (
number INTEGER,
name VARCHAR(20));"""
crsr.execute(ct_sql)
crsr.execute("""INSERT INTO data3 VALUES (1, "GEORGE");""")
crsr.execute("""INSERT INTO data3 VALUES (2, "KEVIN");""")
df = pd.read_sql_query("""SELECT number,name FROM data3""", con=connection)
print(df)
connection.close()

Ausgang:

   number    name
0       1  GEORGE
1       2   KEVIN

Im obigen Beispiel lesen wir Daten aus der Tabelle data1 in der Datenbank delftstack.db. Das Ergebnis der Abfrage wird im DataFrame df gespeichert.

Wir können auch einige praktische Parameter mit dieser Funktion verwenden. Mit dem Parameter index_col wird der Index für den DataFrame angegeben, mit dem Parameter columns können die Spaltennamen bereitgestellt werden.

Der Parameter coerce_float kann nicht-numerische, nicht-String-Werte in Fließkommazahlen umwandeln.

Der nützlichste Parameter ist hier der Parameter chunksize. Wir können in SQL auf riesige Tabellen und Datensätze stoßen.

Wenn wir sie also sofort in einen DataFrame einlesen, wird intern viel Speicher verbraucht. Dies kann mit dem Parameter chunksize vermieden werden, der Datenblöcke der angegebenen Zeilen erstellt.

Es erstellt Iteratorobjekte solcher Chunks, die iteriert und zum Arbeiten mit den Daten verwendet werden können.

pandas.read_sql ist eine weitere Funktion, die in der pandas-Bibliothek verfügbar ist und das Ergebnis einer SQL-Abfrage in einen DataFrame lesen kann. Dies ist jedoch nur ein Wrapper um die Funktionen read_sql_query und read_sql_table aus Gründen der Abwärtskompatibilität.

Immer wenn die Funktion pandas.read_sql() auf eine SQL-Abfrage trifft, wird sie an die in diesem Tutorial besprochene Funktion read_sql_query weitergeleitet.

Eine Alternative zu dieser Funktion ist die Verwendung der Funktion fetchall(). Diese Funktion ruft alle Zeilen des Ergebnisses einer SQL-Abfrage ab.

Wir führen die Anweisung SELECT aus, um die Zeilen zu drucken, und verwenden diese Funktion, um sie abzurufen und mit dem Konstruktor pandas.DataFrame in einem DataFrame zu speichern.

Siehe folgendes Beispiel.

import pandas as pd
import sqlite3

connection = sqlite3.connect("delftstack.db")
crsr = connection.cursor()
ct_sql = """CREATE TABLE data4 (
number INTEGER,
name VARCHAR(20));"""
crsr.execute(ct_sql)
crsr.execute("""INSERT INTO data4 VALUES (1, "GEORGE");""")
crsr.execute("""INSERT INTO data4 VALUES (2, "KEVIN");""")
crsr.execute("""SELECT number,name FROM data4""")
df_new = pd.DataFrame(crsr.fetchall(), columns=["number", "name"])
print(df_new)
connection.close()

Ausgang:

   number    name
0       1  GEORGE
1       2   KEVIN
Manav Narula avatar Manav Narula avatar

Manav is a IT Professional who has a lot of experience as a core developer in many live projects. He is an avid learner who enjoys learning new things and sharing his findings whenever possible.

LinkedIn

Verwandter Artikel - Pandas SQL