Python Flask는 다양한 sql 모듈을 사용할 수 있습니다.

간단하게 SQL 파일을 사용하려면 sqlite를 사용하면 되고, MySQL과 같은 체계적인 시스템을 사용하려면 pymysql을 사용하면 됩니다.


이번 포스트에서는 MySQL과의 연동을 위해 pymysql 모듈을 사용하려고 합니다.


다른 플라스크 예제는 아래의 링크를 살펴봐주시기 바랍니다~



[Python Flask] 웹 페이지 만들기 01 - 환경 설정

[Python Flask] 웹 페이지 만들기 02 - 기본 파일 작성하기

[Python Flask] 웹 페이지 만들기 03 - 파이썬에서 웹으로 값 전달

[Python Flask] 웹 페이지 만들기 04 - Bootstrap 연동하기

[Python Flask] 웹 페이지 만들기 06 - MySQL 연동하기(DB 클래스 생성)




먼저 pymysql의 예제입니다.


CREATE Table 예제

이 예제는 데이터베이스를 연결하고 Table을 생성하는 방법을 나타냅니다.

import pymysql

# database에 접근
db = pymysql.connect(host='localhost',
                     port=3306,
                     user='root',
                     passwd='your_password',
                     db='your_dbname',
                     charset='utf8')

# database를 사용하기 위한 cursor를 세팅합니다.
cursor = db.cursor()

# SQL query 작성
sql = """CREATE TABLE test_table(
         idx  INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
         name VARCHAR(256) NOT NULL,
         nick VARCHAR(256) NOT NULL
         );"""

# SQL query 실행
cursor.execute(sql)

# SQL query가 잘 실행됐는지 table을 살펴보도록 합니다.
# 이미 4번 라인에서 use database를 수행한 것과 다름 없으니 show tables라는 명령을 수행해도 문제가 없습니다.
cursor.execute("show tables") 

# 데이터 변화 적용
# CREATE 혹은 DROP, DELETE, UPDATE, INSERT와 같이 Database 내부의 데이터에 영향을 주는 함수의 경우 commit()을 해주어야 합니다.
db.commit()

# Database 닫기
db.close()

위의 예제에서 대략적인 내용은 모두 작성되었습니다.


이를 조금 더 깔끔하게 한다면 다음과 같이 작성해보는 것도 괜찮을 것 같습니다..

import pymysql
 
db = pymysql.connect(host='localhost',
                     port=3306,
                     user='root',
                     passwd='your_password',
                     db='your_dbname',
                     charset='utf8')
try:
    with db.cursor() as cursor:
        sql = """
            CREATE TABLE test_table(
                   idx  INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
                   name VARCHAR(256) NOT NULL,
                   nick VARCHAR(256) NOT NULL,
            );
        """
        cursor.execute(sql)
        db.commit()
finally:
    db.close()



INSERT 예제

이 예제는 Database와 Table이 완성된 후 Table 내에 데이터를 삽입하는 방법에 대한 예제입니다.

# db 연결작업은 위의 예제에서...

# SQL query 작성
sql = """INSERT INTO test_table(name, nick)
         VALUES('test_name', 'test_nickname');"""

# SQL query 실행
cursor.execute(sql)

# 데이터 변화 적용
db.commit()


위의 예제로 test_table에 'test_name'과 'test_nickname'이라는 값을 삽입하게 됩니다.




SELECT 예제

이 예제는 Database와 Tables 내에 데이터를 조회하는 방법에 대한 예제입니다.

# db 연결작업은 위의 예제에서...

# SQL query 작성
sql = """SELECT * FROM test_table"""

# SQL query 실행
cursor.execute(sql)

# SQL query 실행 결과를 가져옴
result = cursor.fetchall()


SELECT에서는 db.commit() 함수를 실행시키지 않습니다.

이는 DB 내부의 데이터에 영향을 주지 않고, 단지 조회만 했기 때문입니다.

단, 조회된 데이터는 우리가 사용할 수 있어야 하기 때문에 따로 result라는 변수에 실행 결과 값을 가져와야겠지요.

이를 위해서는 fetchall() 함수 혹은 fetchone() 함수를 이용하여 값을 가져와야 합니다.


데이터가 여러 개라면 fetchall() 함수를, 데이터가 하나라면 fetchone() 함수를 사용하는 것이 좋습니다.


가져온 결과는 다음과 같습니다.

print(result)
# ['name' : 'test_name', 'nick' : 'test_nickname']


결과는 dictionary 형태로 가져와집니다.

이를 유념하영 사용하는 것이 좋습니다.



UPDATE 예제

이 예제는 Database와 Tables 내에 데이터를 변경하는 방법에 대한 예제입니다.

# db 연결작업은 위의 예제에서...

# SQL query 작성
sql = """UPDATE test_table SET name='%s', nick='%s'
         WHERE name='%s' """ % ('new_test', 'new_nick', 'test_name')
         
# SQL query 실행
cursor.execute(sql)

# 데이터 변화 적용
db.commit()


위의 예제는 기존에 업로드한 데이터를 변경하는 예제입니다.

이름이 'test_name'인 데이터의 name 컬럼과 nick 컬럼을 각각 'new_test', 'new_nick'으로 변경하는 예제입니다.


이제 이러한 예제를 이용하여 다음 포스트에서는 데이터를 쓰고 업로드 하는 방법을 알아보도록 하겠습니다.





+ Recent posts