팬더 SQLAlchemy
이 기사에서는 SQLAlchemy ORM의 일반적인 정의, pandas DataFrame과 비교하는 방법 및 SQLAlchemy ORM 개체를 pandas DataFrame으로 변환하는 방법을 살펴보겠습니다. 그러나 이 기사에서 pandas DataFrame 및 관계형 데이터베이스를 설정하는 방법에 이미 익숙하다고 가정합니다.
SQLAlchemy ORM
SQLAlchemy는 Python 스크립트와 스크립트에 연결된 데이터베이스 간의 통신 경험을 향상시키는 데 도움이 되는 모듈입니다. 이 모듈은 일반적으로 ORM 또는 개체 관계 매핑 도구로 사용됩니다.
ORM은 본질적으로 파이썬 스크립트의 클래스를 “변환"합니다. ORM을 사용하면 간단한 SQL 쿼리를 작성하여 데이터베이스 관련 작업을 수행할 수 있습니다.
Python 스크립트에서 클래스를 SQL 테이블로 변환하고 함수를 쿼리로 변환하는 것은 ORM을 통해서입니다. 따라서 SQLAlchemy는 종종 Python 스크립트와 관계형 데이터베이스 사이의 다리라고 합니다.
SQLAlchemy ORM을 DataFrame으로 변환
이 함수는 SQL 쿼리 또는 테이블을 데이터 프레임 개체로 읽습니다. read_sql()
함수는 함수에 제공된 매개변수에 따라 프로세스를 read_sql_query()
또는 read_sql_table()
함수에 위임합니다.
다음은 read_sql()
함수에서 일반적으로 사용되는 일부 매개변수입니다.
매개변수 | 설명 |
---|---|
table_name (문자열) |
이름에서 알 수 있듯이 이것은 데이터베이스 테이블의 이름입니다. |
콘 (문자열) |
일반적으로 데이터 연결 URI를 포함합니다. |
스키마 (문자열) |
이 매개변수에는 쿼리해야 하는 데이터베이스 스키마 이름이 포함되어 있습니다. 데이터베이스에 대한 스키마가 없는 경우 이 매개변수를 default 로 설정할 수 있으며 값은 None 으로 설정됩니다. |
index_col (문자열/문자열 목록) |
인덱스 또는 열입니다. 이는 선택 사항이며 기본값인 None 을 사용할 수 있습니다. |
coerce_float (부울) |
이 매개 변수는 문자열이 아닌 값을 부동 소수점 값으로 변환합니다. 이 매개변수의 기본값은 True 로 설정됩니다. |
parse_dates (목록/사전) |
날짜로 구문 분석할 수 있는 열 이름 목록입니다. 기본값은 없음 으로 설정됩니다. |
열 (목록) |
이 매개변수는 데이터베이스 테이블에서 선택할 열 이름 목록입니다. 이 매개변수의 기본값은 없음 으로 설정됩니다. |
청크 크기 (정수) |
이 매개변수는 각 청크의 행 수입니다. 일반적으로 많은 양의 데이터를 동시에 입력하는 데 사용됩니다. 설정할 필요가 없으면 기본값인 없음 으로 설정할 수 있습니다. |
dtype (데이터 유형 이름) |
이 매개변수는 간단한 데이터 유형 이름, int, bool 등이거나 해당 데이터 유형이 지정된 열의 사전일 수 있습니다. |
이러한 모든 메서드의 구문:
pandas.read_sql_query(
sql,
con,
index_col=None,
coerce_float=True,
params=None,
parse_dates=None,
chunksize=None,
dtype=None,
)
일반적으로 Python 스크립트에서는 SQL 데이터베이스를 읽기 위해 훨씬 더 간단하고 간단한 방법을 사용합니다.
data_frame_obj = pd.read_sql(query.statement, db_engine)
위의 이 코드 줄은 Python 스크립트에 정의된 쿼리를 읽고 Dataframe 개체로 읽습니다.
이것을 어떻게 적용할 수 있는지 더 잘 이해하기 위해 이 예제 스크립트를 살펴보겠습니다.
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)
이 스크립트를 성공적으로 실행하려면 다음 라이브러리가 설치되어 있는지 확인해야 합니다.
- 팬더
- SQLAlchemy
- 파이마이SQL
- 도커
이러한 라이브러리를 모두 설정했으면 선택한 터미널에서 다음 명령을 실행하여 도커를 설정합니다.
docker run --name mysql-db -e MYSQL_ALLOW_EMPTY_PASSWORD=yes -p 3306:3306 -d mysql:5.6
다음으로 이 명령을 사용하여 컨테이너에 들어가 데이터베이스를 생성할 수 있습니다.
docker exec -it mysql-db mysql
다음과 같이 데이터베이스 생성 쿼리를 실행합니다.
create database jobs;
이제 환경이 설정되었으므로 컨테이너를 종료하고 Python 스크립트를 실행하여 다음 결과를 얻을 수 있습니다.
출력:
이는 SQLAlchemy ORM을 Pandas Dataframe으로 성공적으로 변환했음을 의미합니다.
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