본문 바로가기
[파이썬]/데이터 분석

[데이터 분석] SQL 명령어를 이용한 데이터베이스 관리 : 입력, 수정, 삭제

by sung min_Kim 2023. 12. 2.


 이전에 다루었던 "SQL 조회 결과로 판다스 데이터프레임 생성하기"에 이어, 이번에는 데이터의 입력, 수정, 삭제하는 방법을 간략하게 살펴보고자 한다. 조회할 때와 마찬가지로, SQL 문을 데이터베이스로 전달하고, 받은 응답을 바탕으로 데이터를 입력, 수정, 삭제하는 과정을 진행해 보겠다. 
(2023.12.01 - [[파이썬]/데이터 분석] - [데이터 분석] SQL 조회 결과로 판다스 데이터프레임 생성하기)

 본 글에서는 라이브러리 호출 및 데이터베이스 연결에 대해서는 다루지는 않겠다. 해당 내용에 대해 자세히 다룬 내용을 참고하실 분들은 아래의 링크를 참조하시길 바란다.
(2023.12.01 - [[파이썬]/데이터 분석] - [데이터 분석] pymysql 라이브러리를 활용한 데이터베이스에 저장된 데이터 조회하기(cursor, execute, fetchall & fetchone, close))

 [차례]
 첫 번째, 데이터 입력하기
 두 번째, 데이터 수정하기

 세 번째, 데이터 삭제하기

 [사용 툴]
- Jupyter notebook(웹 기반 대화형 코딩 환경)
- MariaDB(오픈 소스 관계형 데이터베이스 관리 시스템)

 


· 데이터 입력


 사용자는 SQL 문을 통해 데이터베이스에 원하는 명령을 요청한다. 데이터를 입력할 때에는 'insert into' 키워드를 사용한 SQL 문을 작성하여 데이터베이스에 전달한다. 이 SQL 문이 데이터베이스에 도착하면, 데이터베이스는 요청받은 해당 명령에 따라 데이터를 새롭게 입력하게 된다. 이렇게 하여 사용자는 원하는 데이터를 데이터베이스에 성공적으로 입력할 수 있다.

 이제 "데이터를 입력하라"는 명령을 SQL 문에 담아 데이터베이스에 요청해 보도록 하자. 

# SQL 문 입력 (데이터 입력)
sql = """
    Insert into time_power_demand(ymd, time, power)
    values ('2020-12-31', '24시', 1234)
"""

# 데이터베이스에 SQL문 요청 및 응답저장
rs_cnt = cur.execute(sql)
rs_cnt


 'insert into' 명령어 뒤에는 데이터를 입력하고자 하는 테이블의 이름과 그 테이블의 컬럼 이름을 작성한다. 그다음, 'values' 키워드를 사용하여 각 컬럼에 알맞은 값을 차례로 작성한다. 이렇게 작성된 SQL 문을 데이터베이스에 전달하면, 'time_power_demand' 테이블의 'ymd' 컬럼에는 '2020-12-31', 'time' 컬럼에는 '24시', 그리고 'power' 컬럼에는 '1234'라는 값이 차례로 입력될 것이다.

 위 SQL 쿼리를 실행하면, 데이터베이스의 'time_power_demand' 테이블은 SQL 명령에 따라 데이터 입력을 수행하게 된다. 이 과정에서 1개의 행 데이터가 성공적으로 입력되면, 데이터베이스는 '1'이라는 결과를 반환하게 된다.

 이 '1'은 'cur.execute(sql)' 명령어를 통해 반환된 값으로, SQL 문 실행에 의해 영향받은 행의 개수를 나타낸다.

입력된 행의 개수 1개에 대한 결과 확인

 


· 데이터 수정하기


 데이터를 수정하려면 'update' 명령어를 사용한 SQl 문을 작성하여 데이터베이스에 전달한다. 이 SQL 문은 "데이터를 수정하라"는 명령을 데이터베이스에 요청한다. 이 SQL 명령이 데이터베이스에 도착하면, 데이터베이스는 요청받은 명령에 따라 데이터를 수정(갱신)한다. 이를 통해 사용자는 원하는 데이터를 성공적으로 수정할 수 있다.

 한 가지 유의할 점으로는, 데이터 수정과 삭제는 모두 데이터베이스에서 특정 데이터를 조작하는 작업이므로, 올바르게 수행할 수 있도록 사전에 반드시 검증 과정을 거치야 한다.

 이를 위해 'select' 명령어를 사용하여 수정 또는 삭제하려는 데이터를 먼저 조회해 보는 것이 좋다. 이를 통해 원하는 데이터가 맞는지, 그리고 올바른 조건을 사용하였는지 확인할 수 있다. 이후에 'update' 또는 'delete' 명령어를 사용하여 실제 데이터 조작을 수행하면, 실수로 잘못된 데이터를 조작하는 일을 방지할 수 있다.


수정 전_ select 문을 통한 검증 수행

 수정 전, 'select' 명령어를 사용하여 수정하고자 하는 데이터의 값이 올바른지 먼저 확인한다. 이때 확인하려는 데이터는 'time_power_demnad' 테이블의 'power' 컬럼에 위치한 값으로, "연월일(ymd)이 2020-12-31이며, 시간(time)이 24시인 데이터"를 제한 조건으로 두고 있다.

 

 

# SQL 문 입력 (데이터 수정)
sql = """
     update time_power_demand
        set power = 5678
     where ymd = '2020-12-31'
        and time = '24시'
"""

# 데이터베이스에 SQL문 요청 및 응답저장
rs_cnt = cur.execute(sql)
rs_cnt


 앞서 'select' 문을 사용하여 검증 과정을 거친 후, 이제 'update' 명령어로 데이터 수정을 수행한다. 'update' 명령어 뒤에는 데이터를 수정하려는 테이블의 이름을 작성한다. 그다음, 'set' 키워드를 사용하여 수정하고자 하는 컬럼과 그 새로운 값을 입력한다. 'where' 절에는 수정을 원하는 행을 선별하는 제한 조건을 작성한다.
 위의 경우에는 "연월일(ymd)이 2020-12-31이며, 시간(time)이 24시인 데이터"를 제한 조건으로 두어, 해당 조건에 맞는 발전량(power)의 값을 '5678'로 수정하고 있다.


수정된 행의 개수 1개에 대한 결과 확인

 위 SQL 쿼리를 실행하면, 데이터베이스의 'time_power_demand' 테이블은 SQL 명령에 따라 데이터 수정을 수행하게 된다. 이 과정에서 '1'개의 행 데이터가 성공적으로 수정되면, 데이터베이스는 '1'라는 결과를 반환하게 된다.

 이 '1'은 'cur.execute(sql)' 명령어를 통해 반환된 값으로, SQL 문 실행에 의해 영향받은 행의 개수를 나타낸다.

 


· 데이터 삭제하기


 데이터를 삭제하려면 'delete' 명령어를 사용한 SQL 문을 작성하여 데이터베이스에 전달한다. 이 SQL 문은 "데이터를 삭제하라"는 명령을 데이터베이스에 요청한다. 이 요청이 데이터베이스에 도착하면, 데이터베이스는 요청받은 명령에 따라 데이터를 삭제한다. 이를 통해 사용자는 원하는 데이터를 성공적으로 삭제할 수 있다.

 데이터를 삭제하기 전에도, 수정과 마찬가지로 'select' 명령어를 사용한 SQL 문을 통해 사전에 검증 단계 거치는 것이 중요하다. 
 이번에는 앞서 수정한 데이터를 삭제할 것이다. 따라서 제한 조건은 동일하게 두고, 해당 조건에 맞는 데이터를 먼저 확인해 보도록 하자.


삭제 전_select 문을 이용한 검증 수행

 데이터 삭제 전, 'select' 명령어를 사용하여 삭제하려는 데이터의 값이 올바른지 먼저 확인한다. 이때 확인하려는 데이터는 'time_power_demnad' 테이블의 'power' 컬럼에 위치한 값으로, "연월일(ymd)이 2020-12-31이며, 시간(time)이 24시인 데이터"를 제한 조건으로 두고 있다.


# SQL 문 입력 (데이터 삭제)
sql = """
     delete from time_power_demand
     where power = 5678
        and ymd = '2020-12-31'
        and time = '24시'
"""

# 데이터베이스에 SQL문 요청 및 응답저장
rs_cnt = cur.execute(sql)
rs_cnt


 앞서 'select' 명령어를 사용하여 검증 과정을 거친 후, 이제 'delete' 명령어로 데이터 삭제할 것이다. 데이터를 삭제하려면 'delete from' 절 뒤에 데이터를 삭제하려는 테이블의 이름을 작성한다. 그다음, 'where' 절에는 삭제하려는 행과 해당 행의 값을 제한 조건으로 작성한다. 일반 조건은 'and'를 사용하여 나열한다.
 위의 경우에는 "연월일(ymd)이 2020-12-31이며, 시간(time)이 24시인 데이터"를 일반 조건으로 두고, 발전량(power)이 '5678'인 데이터를 제한 조건으로 두어, 조건에 맞는 행을 삭제한다. 데이터 삭제는 지정된 조건에 맞는 전체 행을 삭제하므로 많은 주의가 필요하다.


 

삭제된 행의 개수 1개에 대한 결과 확인


 위 SQL 쿼리를 실행하면, 데이터베이스의 'time_power_demand' 테이블은 SQL 명령에 따라 데이터 삭제를 수행하게 된다. 이 과정에서 '1'개의 행 데이터가 성공적으로 수정되면, 데이터베이스는 '1'라는 결과를 반환하게 된다.

 이 '1'은 'cur.execute(sql)' 명령어를 통해 반환된 값으로, SQL 문 실행에 의해 영향받은 행의 개수를 나타낸다.

 (데이터베이스에서의 작업을 끝마쳤다면 반드시 연결을 종료해 주도록 하자.)

 



데이터 입력은 'insert into' 명령어를 사용하여 데이터를 입력한다.
이때, 테이블 이름과 함께 입력하려는 값들을 명시해야 한다.

데이터 수정은 'update' 명령어를 사용하여 데이터를 수정한다.
'update' 명령어 뒤에는 수정하려는 값이 존재하는 테이블 이름을,
'set' 키워드를 사용하여 수정하려는 컬럼과 그 새로운 값을 작성한다.

'where' 절에는 수정하려는 행을 선별하는 제한 조건을 작성한다.

데이터 삭제는 'delete' 명령어를 사용하여 데이터를 삭제한다.
'delete' 명령어 뒤에는 'From' 절을 함께 사용하여 삭제하려는 값이 존재하는 테이블 이름을,
'where' 절에는 삭제하려는 행과 해당 행의 값을 제한 조건으로 작성한다.


데이터를 수정 및 삭제하기 전에는 반드시 'select' 명령어를 사용하여 검증 과정을 거쳐야 한다.
이는 데이터의 오류나, 잘못된 삭제를 방지하기 위함이다.
특히 삭제는 지정된 조건에 맞는 전체 행이 삭제되므로 많은 주의가 필요하다.