데이터로그😎

python - mysql 연결 본문

SQL/MySQL

python - mysql 연결

지연v'_'v 2023. 9. 6. 14:56

SQL ALCHEMY

  • python에서 사요하는 대표적인 ORM
    ORM: Object Relational Mapping
    • SQL 데이터베이스와 파이썬의 상호작용을 지원하는 강력한 라이브러리! 
    • 데이터베이스를 객체화시켜 데이터베이스에 있는 데이터를 CRUD
    • 사용하는 DBSMS가 변경되면 엔진만 바꿔주면 된다.
    • 쿼리 대신 함수 형태(메소드) CRUD를 할 수 있다.
       
  • 설치
pip install --upgrade 'sqlalchemy<2.0'

 

Prerequisite

import pandas as pd
from sqlalchemy import create_engine
  • create_engine 의 기능
    •  함수는 데이터베이스와의 연결을 설정하고 관리하는 데 사용된다.
    • 데이터베이스에 대한 연결 설정: 함수에 데이터베이스의 종류, 사용자 이름, 비밀번호, 호스트 주소 및 데이터베이스 이름과 같은 연결 정보를 제공하여 데이터베이스와의 연결을 설정.
    • 데이터베이스 엔진 생성: 함수는 지정한 연결 정보를 기반으로 데이터베이스 엔진을 생성한다. 데이터베이스 엔진은 SQLAlchemy를 통해 데이터베이스와 상호 작용하는 데 사용된다.
    • 연결 관리: 생성된 데이터베이스 엔진을 사용하여 데이터베이스와의 연결을 관리하고 SQL 쿼리를 실행한다. 연결 관리와 쿼리 실행은 SQLAlchemy의 ORM(Object-Relational Mapping) 및 Core 기능을 사용하여 수행된다.

 

 

1. SQL DB - python 연결하기

  • engine 만들기
# MySQL 연결 정보 설정
username = '입력하세요'
password = '입력하세요'
hostname = '입력하세요'
database_name = '입력하세요'


# DB 정보를 활용해서 Connection String 만들기
conn = f'mysql://{username}:{password}@{hostname}/{database_name}?charset=utf8'

# 엔진 생성
engine = create_engine(conn)

# 엔진 연결 끊기
engine.dispose()


내가 헷갈려서 써놓는 추가 설명.

MySQL을 들어가면 첫 화면에 위의 사진과 같이 connection들이 보인다.

 

여기서 hostname는 로컬에서 사용한다면 'localhost'  (또는 위의 사진에서 root 아래에 있는 127.0.~~ 이걸 사용하면 된다. 단, port 번호는 빼고)를 입력하면 된다.

username는 위의 사진에서 사람 아이콘 옆에 있는 'root'이고 (이는 connection을 만들 때 다르게 설정 가능하다.)

password는 connection을 생성할 때 설정했던 비밀번호를 입력하면 된다.

database_name은 connection 내에 생성된 db 중 연결하고 싶은 db의 이름을 쓰면 된다.

 

 

2. SQL db의 테이블을 python 환경에서 불러오기

engine 생성까지는 1번 과정과 동일하다.

엔진을 생성한 후 pd.read_sql()을 통해 query와 engine을 함께 넣고 데이터베이스의 테이블을 불러온다.

# MySQL 연결 정보 설정
username = '입력하세요'
password = '입력하세요'
hostname = '입력하세요'
database_name = '입력하세요'


# DB 정보를 활용해서 Connection String 만들기
conn = f'mysql://{username}:{password}@{hostname}/{database_name}?charset=utf8'

# 엔진 생성
engine = create_engine(conn)

# SQL 쿼리를 사용하여 테이블 데이터를 읽어옵니다.
query = "SELECT * FROM sql_analyze.tb_popltn_data"

# Pandas의 read_sql_query 함수를 사용하여 데이터를 읽어옵니다.
df = pd.read_sql_query(query, engine)
df

 

함수화

def sql_table_import(username, password, host_name, database_name, query):
    import pandas as pd
    from sqlalchemy import create_engine

    conn = f'mysql://{username}:{password}@{host_name}/{database_name}?charset=utf8'

    # 엔진 생성
    engine = create_engine(conn)

    query = query
    df = pd.read_sql_query(query, engine)
    engine.dispose()
    return df

 

3. python의 데이터프레임을 SQL db에 적재하기

# MySQL 연결 정보 설정
username = '입력하세요'
password = '입력하세요'
hostname = '입력하세요'
database_name = '입력하세요'


# DB 정보를 활용해서 Connection String 만들기
conn = f'mysql://{username}:{password}@{hostname}/{database_name}?charset=utf8'

# 엔진 생성
engine = create_engine(conn)


# 데이터프레임을 MySQL 테이블로 적재
table_name = 'db에 적재될 테이블 명을 입력하세요.'  # 새로운 테이블 이름
df.to_sql(table_name, con=engine, if_exists='replace', index=False)

# 연결 종료
engine.dispose()

engine까지는 1번 과정과 동일하다.

여기서 df는 pandas의 데이터 프레임이다.

이 때 df의 column명에 마침표나 콤마 등의 기호가 없는지 잘 확인할 것.

 

함수화

def df_to_sql(username, password, host_name, database_name, df,db_table_name):
    import pandas as pd
    from sqlalchemy import create_engine

    conn = f'mysql://{username}:{password}@{host_name}/{database_name}?charset=utf8'

    # 엔진 생성
    engine = create_engine(conn)

    table_name = db_table_name
    df.to_sql(table_name, con=engine, if_exists='replace',index = False)

    engine.dispose()
    return

 


 

'SQL > MySQL' 카테고리의 다른 글

서브 쿼리  (0) 2023.09.06
ERD 표기법  (0) 2023.09.06
JOIN  (1) 2023.09.05
조건문  (0) 2023.09.05
Basic Query  (0) 2023.09.05