서버사이드 프로그램을 짜더라도 DB에 접근 하여 데이터를 가져다가 작동을 하게 하는 경우가 많다.
python의 경우 프로그래밍 언어 이고 사용자 층도 두껍고 오래 되었기 때문에 대부분 드라이버가 제공이 된다.
그래서 필요한 내용을 설치하여 import 하여 사용 하면 된다 🙂
하지만 db 정보가 소스에 삽입되어 있는 것은 좋지 못하기 때문에 YAML 형식의 문서로 config 파일을 생성하고
그 config 파일을 python 에서 읽어서 DB 접속을 해야 한다. (json 은 시인성이 좋지만 주석을 첨부 할 수 없고/xml은 시인성이 너무 떨어진다.)
1 2 3 4 5 6 7 8 9 10 11 |
--- MYSQLDB: DBHOST: 127.0.0.1 DBPORT: 3306 DBNAME: databasename DBUSER: sqlusename DBPASS: userpassword CHARSET: utf8 DBCA: /some/where/ca.pem ### mysql-ssl 접속을 위한 Root CA DBKEY: /some/where/ccc.key ### mysql-ssl 접속을 위한 Keyfile DBCERT: /some/where/ccc.cert ### mysql-ssl 접속을 위한 Certificate |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
#!/usr/bin/env python #-*- coding: utf-8 -*- import yaml import pymysql def mysqldbcon(): readyaml = yaml.safe_load_all(file('/opt/test/config.yaml', 'r')) ### 경로를 모두 지정하는것이 좋다. for a in readyaml: for b, c in a.items(): if b == 'MYSQLDB': conn = pymysql.connect( host = c['DBHOST'], port = c['DBPORT'], db = c['DBNAME'], user = c['DBUSER'], password = c['DBPASS'], #ssl = { 'ssl': { 'ca': c['DBCA'], 'key': c['DBKEY'], 'cert': c['DBCERT'] } }, ### ssl 접속을 쓰는 것을 추천하지만... charset = c['CHARSET'] ) return conn def main(): db = mysqldbcon() with db.cursor(pymysql.cursors.DictCursor) as cur: sqlquery = 'SELECT VERSION()' cur.execute(sqlquery) rows = cur.fetchall() for a in rows: print a['VERSION()'] db.close() if __name__ == "__main__": main() exit(0) |
1 2 3 |
~]# ./test.py 10.3.14-MariaDB-log |
여담으로 python은 기본적으로 CentOS linux 에 대부분 설치되어 있으나 import 하는 pymysql 과 yaml은 설치 되어 있지 않기 때문에 아래와 같이 pip를 설치 하고 pip으로 설치 한다..
1 2 3 4 5 6 7 |
~]# yum install python2-pip ... ... ~]# pip install pymysql pyyaml ... ... |
YAML의 경우 python 혼자만 쓰는 설정파일일 경우 info.py 를 만들고 import 하는게 편하지만 다른 언어의 프로그램 이나 로직과 겸용해야 할때 필요하겠지..