Python のパンダ read_sql_query
SQL は、リレーショナル データベース管理システムでデータベースを作成および維持するために使用されるプログラミング言語です。 Python を使用して、多くのデータベース アプリケーションを作成できます。
SQLite
、SQLAlchemy
などのいくつかのライブラリを使用して、デバイスにインストールされている 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_sql
は pandas
ライブラリで利用できる別の関数で、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 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