팬더 SQLAlchemy

Fariba Laiq 2024년2월15일
  1. SQLAlchemy ORM
  2. SQLAlchemy ORM을 DataFrame으로 변환
팬더 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 데이터 프레임으로 변환

이는 SQLAlchemy ORM을 Pandas Dataframe으로 성공적으로 변환했음을 의미합니다.

작가: Fariba Laiq
Fariba Laiq avatar Fariba Laiq avatar

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

관련 문장 - Pandas SQL