티스토리 뷰

728x90

이 전 글에서는 pythonanywhere에서우리 파이썬 프로젝트와 pythonanywhere DB를 연결을 위해 우리 소스를 pythonanywhere에 올려 보도록 합시다. 소스를 올리는 방법은 여러 가지가 있습니다. 일반적으로 pythonanywhere에서Consoles 탭에서 pythonanywhere 리눅스 콘솔에 접속하여 git을 이용해서 소스를 pythonanywhere에 올려 둘 수 있습니다.  우리는 git을 이용해서 소스를 관리를 하고 github에 소스를 올려 두었습니다. pythonanywhere 콘솔에서 git을 이용해서 우리 소스를 다운 받고 DB 연결까지 해봅시다.

 

pythonanywhere에sqlite 패키지의 함수들을 사용해서 작성을 했습니다. 이는 Python DB API 표준을 따르기 때문에 sqlite 패키지의 함수와 동일하게 사용 가능한 mysql 패키지(모듈) 중에  PyMysql이라는 패키지를 설치해서 연결 부분만 변경해서 사용하도록 합니다.

우리가 만든 sqlite에서는 db파일과 연결 할 때 sqlite3.connect('db파일')을host adress, username, password, db명 이 필요합니다. connect(여기에 저 정보들이 들어가게 됩니다.)

PyMysql 패키지를 설치를 합니다. 패키지를 설치하기 전에 pythonanywhere에서도

대시보드로 가서 

위 빨간 네모 박스 버튼을 누르면

 

콘솔 화면이 나타납니다. 여기서 아래 명령어로 가상 환경을 만듭니다.

mkvirtualenv --python=python3.8 myweb 

 

가상 환경에서 PyMysql 패키지를 설치를 합니다. 

pip install PyMySQL

설치 후 기존 우리 소스에서 sqlite3 대신 pymysql를 import 시킵니다. 그리고 sqlite3.connect 도 pymysql.connect로 변경하고 connect() 함수 안에 파라미터는 키와 값 형식으로 정보들을 입력합니다.

pymysql.connect(host='host adress', user='username', password='password', db='db명', charset='utf8')

굵은 글씨는 pythonanywhere에서에서 git clone으로 받아 실행을 해보면 됩니다. 근데 저 DB 정보들은 다른 사람들이 알면 안 되는 정보들이기 때문에 공개된 github에 올리면 안 되겠죠. 물론 우리는 학습용으로 만든 데이터베이스이기 때문에 중요한 데이터는 없습니다. 만약 기업이나 다른 프로젝트 등 중요 데이터가 있는 DB라면 큰일이겠죠. 실제 저런 실수들을 많이 하게 됩니다. 비공개된 github로 올려서 공동 작업하는 사람들끼리 공유하면 괜찮겠죠. 또는 db 정보들은 별도의 파일로 만들어 외부에서 불러오게 만들어도 됩니다. 우리는 그냥 학습용이고 github도 비공개로 되어 있기 때문에 그냥 쓰는 걸로 하죠. 저 정보들을 언제든 수정하기 쉽게 위에 정의는 따로 해주는 방식으로 소스를 조금 변경해봅니다.

만약 github에 dbdb.py 파일을 업로드를 해놓았다면 

git clone <github 리파지토리 주소>

이렇게 해서 소스를 받아도 되고 

 

 

Files 메뉴에서 Upload a file 버튼을 눌러 dbdb.py 파일을 업로드합니다.

그리고 업로드된 파일을 클릭을 해봅니다.

 

수정할 수 있는 페이지로 변경됩니다.

dbdb.py 파일을 아래와 같이 소스를 조금 수정합니다. 

import pymysql

def dbcon():
    return pymysql.connect(host='anywhere아이디.mysql.pythonanywhere-services.com',
                   user='db아이디', password='db패스워드',
                   db='디비$mydb', charset='utf8')

def create_table():
    try:
        db = dbcon()
        c = db.cursor()
        c.execute("CREATE TABLE student (num varchar(50), name varchar(50))")
        db.commit()
    except Exception as e:
        print('db error:', e)
    finally:
        db.close()

def insert_data(num, name):
    try:
        db = dbcon()
        c = db.cursor()
        setdata = (num, name)
        c.execute("INSERT INTO student VALUES (%s, %s)", setdata)
        db.commit()
    except Exception as e:
        print('db error:', e)
    finally:
        db.close()

def select_all():
    ret = list()
    try:
        db = dbcon()
        c = db.cursor()
        c.execute('SELECT * FROM student')
        ret = c.fetchall()
        # for row in c.execute('SELECT * FROM student'):
        #     ret.append(row)
    except Exception as e:
        print('db error:', e)
    finally:
        db.close()
        return ret

def select_num(num):
    ret = ()
    try:
        db = dbcon()
        c = db.cursor()
        setdata = (num,)
        c.execute('SELECT * FROM student WHERE num = %s', setdata)
        ret = c.fetchone()
    except Exception as e:
        print('db error:', e)
    finally:
        db.close()
        return ret

create_table()
insert_data('20201234', '파이썬')
ret = select_all()
print(ret)

pymysql를 import 해주고 ?%s 로 바꿔 주고 함수들을 아래에서 호출하게 했습니다.

pythonanywhere 콘솔에서 python dbdb.py를 입력해서 실행시켜 봅니다.

테이블도 생성되고 데이터 가 삽입이 되고 그 데이터를 가져와서 출력까지 정상적으로 된 것을 확인할 수 있네요.

이제 우리 Flask 소스도 조금 변경시켜 github에 push를 하고 pythonanywhere 콘솔에서 git clone 작업까지 진행해봅니다.

 

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
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
글 보관함