python에서 DB를 연결할 때 주로 SQLite3를 많이 사용하지만, 회사에서 MSSQL을 사용해야 할 일이 생겼다.
Python의 SQLAlchemy 툴킷을 이용하면 다양한 형태의 DB에 접근할 수 있다.
SQLAlchemy는 쉽게 각 DB의 API를 이용해 Python에서 제어할 수 있게 해주는 ToolKit이라 생각하면 된다.
MSSQL 사전 설정하기
MSSQL 홈페이지에서 개발자용 SQL Server를 다운로드한다.
https://www.microsoft.com/ko-kr/sql-server/sql-server-downloads
Microsoft SQL Server Management Studio를 실행한다.
PC 설정 > 시스템 > 정보의 디바이스 이름을 서버 이름으로 설정하고 로그인한다.
Win버튼을 눌러 odbc를 검색하여 ODBC 데이터 원본을 클릭한다.
연결을 위한 Driver로 ODBC Driver 17 for SQL Server를 이용할 것이다.
사용자 DSN > 추가를 클릭한다.
ODBC Driver 17 for SQL Server로 드라이버를 설정한다.
이름(사용자 ID)과 서버를 입력하여 데이터 원본을 생성한다.
해당 항목으로 작성을 이어간다.
나머지 설정을 확인하고 생성을 마무리하면 된다.
다시 Microsoft SQL Server Management Studio로 돌아와 SQL Server 인증으로 변경하여 로그인한다.
데이터베이스 > 새 데이터베이스를 클릭하여 새로운 데이터베이스를 설정한다.
데이터베이스 생성은 설계한 스키마에 따라 설정을 달리하면 된다.
Python으로 연결하기
Python에서 SQL을 연결할 때에는 크게 5가지 정보가 필요하다.
- driver 이름
- 사용자 계정(ID)
- 사용자 패스워드(PW)
- DB 이름
- 서버 이름
우선 SQLAlchemy 패키지를 불러온다.
# SQL 라이브러리
import sqlalchemy as sa
# SQL 에러문 라이브러리
from sqlalchemy.exc import SQLAlchemyError
정보를 입력하고 SQLAlchemy를 통해 연결한다.
my_uid = ""
my_pwd = ""
my_host = ""
my_db = ""
my_odbc_driver = "ODBC Driver 17 for SQL Server"
connection_uri = sa.engine.url.URL.create(
"mssql+pyodbc",
username=my_uid,
password=my_pwd,
host=my_host,
database=my_db, # required; not an empty string
query={"driver": my_odbc_driver},
)
engine = sa.create_engine(connection_uri, fast_executemany=True)
결과적으로 engine을 반환한다. 해당 engine은 pandas의 SQL을 다루는 문법으로 다룰 수 있다.
주로 con이라는 속성에 engine을 사용한다.
# 연결한 DB의 table이라는 이름을 가진 데이터프레임 할당
df = pd.read_sql_table('table', con=engine)
# 정제한 df를 table2라는 이름으로 저장하기 (DB 변경 권한을 설정해야 가능)
df.to_sql(name="table2", con=engine, index=False, if_exists='replace', chunksize= 100000)
'Python > Database' 카테고리의 다른 글
Python에서 SQL에 데이터 UPSERT하기 (1) | 2021.10.15 |
---|