Python のパンダ read_sql_query

Manav Narula 2023年6月21日
Python のパンダ read_sql_query

SQL は、リレーショナル データベース管理システムでデータベースを作成および維持するために使用されるプログラミング言語です。 Python を使用して、多くのデータベース アプリケーションを作成できます。

SQLiteSQLAlchemy などのいくつかのライブラリを使用して、デバイスにインストールされている SQL アプリケーションへの接続を作成できます。

Python では、pandas ライブラリを使用してテーブルを DataFrame オブジェクトとして保存できます。 このライブラリを使用して SQL クエリを操作することもできます。

このチュートリアルでは、pandas.read_sql_query() 関数を使用して SQL クエリから結果を読み取る方法を示します。

Python Panda read_sql_query

pandas.read_sql_query() 関数を使用すると、クエリの結果を直接 DataFrame に読み込むことができます。 この関数を使用するには、SQL データベースへの接続を作成する必要があります。

この例では、sqlite3 ライブラリを使用します。 このライブラリを使用して、SQLite データベース アプリケーションを操作できます。

connect() メソッドは接続を作成するために使用され、データベースの名前はこの関数で提供されます。 接続を作成し、SELECT ステートメントを実行してデータを DataFrame にロードします。

以下のコードを参照してください。

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()

出力:

   number    name
0       1  GEORGE
1       2   KEVIN

上記の例では、delftstack.db データベースの data1 テーブルからデータを読み取ります。 クエリの結果は、df DataFrame に格納されます。

この関数でもいくつかの便利なパラメーターを使用できます。 index_col パラメータは DataFrame のインデックスを指定するために使用され、列名は columns パラメータで指定できます。

coerce_float パラメーターは、非数値、非文字列の値を浮動小数点数に変換できます。

ここで最も役立つパラメータは chunksize パラメータです。 SQL で巨大なテーブルやデータセットに遭遇することがあります。

したがって、それらを一度に DataFrame に読み込むと、内部で大量のメモリが消費されます。 これは、指定された行のデータのチャンクを作成する chunksize パラメータで回避できます。

このようなチャンクの iterator オブジェクトを作成し、反復してデータを操作するために使用できます。

pandas.read_sqlpandas ライブラリで利用できる別の関数で、SQL クエリの結果を DataFrame に読み取ることができます。 ただし、これは下位互換性のための read_sql_query および read_sql_table 関数の単なるラッパーです。

pandas.read_sql() 関数が SQL クエリに遭遇するたびに、このチュートリアルで説明した read_sql_query 関数にルーティングされます。

この関数の代わりに、fetchall() 関数 を使用することもできます。 この関数は、SQL クエリの結果のすべての行をフェッチします。

SELECT ステートメントを実行して行を出力し、この関数を使用してそれらを取得し、pandas.DataFrame コンストラクターを使用して DataFrame に格納します。

次の例を参照してください。

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()

出力:

   number    name
0       1  GEORGE
1       2   KEVIN
著者: Manav Narula
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

関連記事 - Pandas SQL