https://mlops-for-mle.github.io/tutorial/docs/database/overview
Overview
- Docker를 이용해 DB server (Postges Server) 생성
- psycopg2 패키지 이용하여 테이블 생성 및 데이터 삽입
DB Server Creation
- DB 서버 생성
docker run -d \
--name postgres-server \
-p 5432:5432 \
-e POSTGRES_USER=myuser \
-e POSTGRES_PASSWORD=mypassword \
-e POSTGRES_DB=mydatabase \
postgres:14.0
- psql 설치
- psql을 통해 생성된 PostgreSQL DB 서버로 접속
PGPASSWORD=mypassword psql -h localhost -p 5432 -U myuser -d mydatabase
접속 되었습니다.
Table Creation
- Table Creator
# table_creator.py
import psycopg2
def create_table(db_connect):
create_table_query = """
CREATE TABLE IF NOT EXISTS iris_data (
id SERIAL PRIMARY KEY,
timestamp timestamp,
sepal_length float8,
sepal_width float8,
petal_length float8,
petal_width float8,
target int
);"""
print(create_table_query)
with db_connect.cursor() as cur:
cur.execute(create_table_query)
db_connect.commit()
if __name__ == "__main__":
db_connect = psycopg2.connect(
user="mypassword",
password="myuser",
host="localhost",
port=5432,
database="mydatabase",
)
create_table(db_connect)
db_connect 를 통해 DB Server에 접속하여 Table Create을 진행하였습니다.
- DB Server 확인
아까 열어봤던 DB Server 에서 테이블을 조회해보았고, 다음과 같이 테이블이 생성되었습니다.
테이블을 쿼리한 결과 0 rows가 출력됩니다.
Data Insertion
INSERT INTO {table_name} (col_1, col_2, ...) VALUES (val_1, val_2, ...)
- Data Insertion
# data_insertion.py
import pandas as pd
import psycopg2
from sklearn.datasets import load_iris
def get_data():
X, y = load_iris(return_X_y=True, as_frame=True)
df = pd.concat([X, y], axis="columns")
rename_rule = {
"sepal length (cm)": "sepal_length",
"sepal width (cm)": "sepal_width",
"petal length (cm)": "petal_length",
"petal width (cm)": "petal_width",
}
df = df.rename(columns=rename_rule)
return df
def insert_data(db_connect, data):
insert_row_query = f"""
INSERT INTO iris_data
(timestamp, sepal_length, sepal_width, petal_length, petal_width, target)
VALUES (
NOW(),
{data.sepal_length},
{data.sepal_width},
{data.petal_length},
{data.petal_width},
{data.target}
);"""
print(insert_row_query)
with db_connect.cursor() as cur:
cur.execute(insert_row_query)
db_connect.commit()
if __name__ == "__main__":
db_connect = psycopg2.connect(
user="myuser",
password="mypassword",
host="localhost",
port=5432,
database="mydatabase",
)
df = get_data()
insert_data(db_connect, df.sample(1).squeeze())
과정은 Create Table 때와 같고, Query를 Insertion과 관련하여 해줍니다.
- DB Server 확인
데이터가 한 줄 추가된 것을 확인하였습니다.
'MLOps 스터디' 카테고리의 다른 글
Black formatter, Github Actions에 적용하기 (0) | 2024.01.26 |
---|---|
CI / CD? Git Action으로 이해해보기 (0) | 2024.01.07 |