Python의 팬더 read_sql_query
SQL은 관계형 데이터베이스 관리 시스템에서 데이터베이스를 만들고 유지 관리하는 데 사용되는 프로그래밍 언어입니다. Python을 사용하여 많은 데이터베이스 응용 프로그램을 만들 수 있습니다.
SQLite
, SQLAlchemy
등과 같은 여러 라이브러리를 사용하여 장치에 설치된 SQL 애플리케이션에 대한 연결을 생성할 수 있습니다.
Python에서는 pandas
라이브러리를 사용하여 테이블을 DataFrame 개체로 저장할 수 있습니다. 이 라이브러리를 사용하여 SQL 쿼리도 사용할 수 있습니다.
이 튜토리얼은 pandas.read_sql_query()
함수를 사용하여 SQL 쿼리에서 결과를 읽는 방법을 보여줍니다.
Python Pandas 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
매개변수를 사용하면 이를 방지할 수 있습니다.
반복할 수 있고 데이터 작업에 사용할 수 있는 청크의 반복자 개체를 만듭니다.
pandas.read_sql
은 SQL 쿼리 결과를 DataFrame으로 읽을 수 있는 pandas
라이브러리에서 사용할 수 있는 또 다른 함수입니다. 그러나 이는 이전 버전과의 호환성을 위해 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