python 에서 mysql 접속 하기

서버사이드 프로그램을 짜더라도 DB에 접근 하여 데이터를 가져다가 작동을 하게 하는 경우가 많다.

python의 경우 프로그래밍 언어 이고 사용자 층도 두껍고 오래 되었기 때문에 대부분 드라이버가 제공이 된다.

그래서 필요한 내용을 설치하여 import 하여 사용 하면 된다 🙂

 

하지만 db 정보가 소스에 삽입되어 있는 것은 좋지 못하기 때문에 YAML 형식의 문서로 config 파일을 생성하고

그 config 파일을 python 에서 읽어서 DB 접속을 해야 한다. (json 은 시인성이 좋지만 주석을 첨부 할 수 없고/xml은 시인성이 너무 떨어진다.)

 

 

여담으로 python은 기본적으로 CentOS linux 에 대부분 설치되어 있으나 import 하는 pymysql 과 yaml은 설치 되어 있지 않기 때문에 아래와 같이 pip를 설치 하고 pip으로 설치 한다..

 

YAML의 경우 python 혼자만 쓰는 설정파일일 경우 info.py 를 만들고 import 하는게 편하지만 다른 언어의 프로그램 이나 로직과 겸용해야 할때 필요하겠지..

4 thoughts on “python 에서 mysql 접속 하기”

  1. 안녕하세요~
    파이썬을 시작한지 얼마되지 않아 궁금한 점이 있어 문의 드립니다.
    db가 여러 개인 경우 우선 각각의 connection을 생성한 후 전달인자(db 스키마)가 주어졌을 때 해당 스키마에 맞는 connection의 return값을 받고 싶은 경우는 어떤식으로 접근하여 코드를 구성하면 좋을지 궁금합니다.
    각 db마다 host가 다르기 때문에 클래스든 함수든 connection을 분리하여 구성할 수 밖에 없고, 해당 스키마가 포함된 db와 자동적으로 mapping이 되어 결과값이 하나로 도출되도록 하는 것이 목표입니다. 혹시 방법이 있을까요? 현재는 하드코딩식으로 조건을 주어야만 결과를 얻을 수 있는 상태입니다.

    1. 아래처럼 yaml 에 db 정보를 하나 더 생성을 해두고 def를 호출할때 접속할DB를 담아서 던질 수 있습니다.

      config.yaml

      test.py

      1. 정성스런 답변 감사 드립니다!
        제가 질문내용을 조금 잘못 설명 드린 듯 합니다. 바쁘시지 않다면 한 번 더 답변 부탁 드립니다!
        예를 들어, 1번 db에 a,b,c 스키마가 있고, 2번 db에 d,e,f , 3번 db에 g, h, i 스키마가 있는데 각각 다른 host, port, dbname 등을 가지고 있습니다. config.py에서 ‘d’ 스키마명이 전달되었을 경우 2번 db에만 접근하여 return값을 받아오는 경우입니다. 위에 주신 답변처럼 첫 번째 결과 내에서 2번을 최종적으로 도출하는 경우가 아닌 전체 db connection 중 전달된 스키마가 포함된 db에만 접근하여 결과를 도출해야 하는 경우입니다.
        그리고 답변주신대로 yaml 형식으로 .py 파일을 생성하여 import해서 사용해 봤는데 계속 에러가 발생하네요…db pw가 모두 !로 시작해서인지 모르겠지만 구글링을 해봐도 방법을 잘 못 찾겠네요…ㅠㅠ
        답변 부탁 드립니다!! ㅠㅠㅠㅠ

        1. YAML 안의 데이터 중 스트링은 그냥 써도 되지만
          특수문자가 들어간 경우에는 더블쿼터 ” 를 사용하는게 좋을거 같습니다.

          YAML의 데이터는 array 표현식으로 써서 def 에서 조건식으로 일치하는것을 찾을수 있을듯 합니다.

답글 남기기

이메일 주소를 발행하지 않을 것입니다.

이 사이트는 스팸을 줄이는 아키스밋을 사용합니다. 댓글이 어떻게 처리되는지 알아보십시오.