MSSQL 사용

1. Microsoft SQL Server DB 모듈

Python에서 Microsoft SQL Server 데이타베이스를 사용하기 위해 우선 Python DB API 표준을 따르는 MSSQL DB 모듈을 다운받아 설치한다. MSSQL DB 를 지원하는 Python 모듈은 여러 가지가 있는데, 여기서는 pymssql 이라는 모듈을 사용해 본다. pymssql은 Python DB API (PEP-249) 스펙을 따르는 FreeTDS 위에 구현된 파이썬 모듈이다.

MSSQL DB 모듈 중 하나인 pymssql 모듈을 다음과 같이 설치한다.

$ pip install pymssql

2. MSSQL 사용 절차

Python에서 MSSQL에 있는 데이타를 사용하는 일반적인 절차는 다음과 같다.

  1. pymssql 모듈을 import 한다
  2. pymssql.connect() 메소드를 사용하여 MSSQL에 Connect 한다. 호스트명, 로그인, 암호, 접속할 DB 등을 파라미터로 지정할 수 있다.
  3. DB 접속이 성공하면, Connection 객체로부터 cursor() 메서드를 호출하여 Cursor 객체를 가져온다. DB 커서는 Fetch 동작을 관리하는데 사용된다.
  4. Cursor 객체의 execute() 메서드를 사용하여 SQL 문장을 DB 서버에 보낸다.
  5. SQL 쿼리의 경우 Cursor 객체의 fetchall(), fetchone(), fetchmany() 등의 메서드를 사용하여 데이타를 서버로부터 가져온 후, Fetch 된 데이타를 사용한다.
  6. 삽입, 갱신, 삭제 등의 DML(Data Manipulation Language) 문장을 실행하는 경우, INSERT/UPDATE/DELETE 후 Connection 객체의 commit() 메서드를 사용하여 데이타를 확정 갱신한다.
  7. Connection 객체의 close() 메서드를 사용하여 DB 연결을 닫는다.

아래 예제들의 기본 샘플 데이타로 아래와 같은 Customer 테이블이 있다고 가정하자.

3. MSSQL 쿼리

SQL 쿼리는 SELECT 문을 작성하여 execute() 메서드를 실행하면 된다. 아래 예제는 위에서 설명한 일반적인 MSSQL 사용 절차를 따른 것으로, 간단한 SELECT 문을 실행한 후, 전체 ROW 데이타를 출력하는 예이다.

  # pymssql 패키지 import
  import pymssql
  
  # MSSQL 접속
  conn = pymssql.connect(host=r"(local)", database='MyDB', charset='utf8')
  
  # Connection 으로부터 Cursor 생성
  cursor = conn.cursor()
  
  # SQL문 실행
  cursor.execute('SELECT * FROM Customer;')
  
  # 데이타 하나씩 Fetch하여 출력
  row = cursor.fetchone()
  while row:
      print(row[0], row[1])
      row = cursor.fetchone()
    
  # 연결 끊기
  conn.close()		      

위의 예제에서 몇가지 주목할 점은
(1) connect() 메서드에서 host와 database 만을 지정하였는데, 이는 기본적으로 Windows Authentication 을 사용하여 SQL Server에 접속하게 된다. 만약 SQL Authentication을 사용할 경우는 아래처럼 user와 password 를 지정한다.

    conn = pymssql.connect(host=r"(local)", user='sa', password='pwd', database='MyDB')
또한, 한글이 깨지는 경우 charset을 UTF8으로 지정하면 된다.

(2) 커서의 fetchone() 메서드는 데이타를 클라이언트로 하나씩 가져올 때 사용된다. fetchone()을 여러 번 호출하면, 호출 때 마다 한 Row 씩 데이타를 가져오게 된다. 그리고, 모든 데이타를 한꺼번에 클라이언트로 가져올 때는 fetchall()을, n개 만큼의 데이타만 가져올 때는 fetchmany(n)를 사용한다.

(3) DB 사용이 끝난 경우 close() 메서드를 호출하여 연결을 끊어 준다.

본 웹사이트는 광고를 포함하고 있습니다. 광고 클릭에서 발생하는 수익금은 모두 웹사이트 서버의 유지 및 관리, 그리고 기술 콘텐츠 향상을 위해 쓰여집니다.