본문 바로가기

Python

python으로 DB 파일 출력 및 수정

📜 국비 학원을 다니며 배운 내용을 일기 형식으로 작성하고자 함에 정의를 두며

📜 본인이 알고 있는 내용보다 더 좋은 방법 혹은 툴 등을 공유 하고, 공유 받을 수 있는 기회의 창으로 공개한다

 

DB Browser for SQLite

본인은 DB Browser를 통해 sql 실행 명령을 하고 데이터 미리보기에 활용하고 있다

( 더 좋은 툴이 있다면 알려주세용 :D )

생성된 DB File을 python에서 출력하고 수정해보자

 

newTest_02.db / table : sample

💿 임의의 데이터 파일을 생성한다 ( file name : newTest_02.db / table name : sample)

 

python 에서 sqlite 의 실행 명령을 내리기 위해선 sqlite3가 필요하고

sqlite3 에 대한 connect 및 cursor 설정이 필요하다

해당 내용은 아래와 같다

 

import sqlite3 as sql			    # as sql 명령으로 sqlite3 라이브러리를 sql이란 변수로 호출할 수 있다
conn = sql.connect(".db 파일 full path")     # 출력 혹은 수정하고 싶은 파일의 full path를 connect 시켜준다
cmd = conn.cursor()

 

sqlite3 sql 실행 명령을 위한 준비 완료

 

sqlite DB Browser 에서의 데이터를 출력해보기 위한 실행명령은 아래와 같다

 

select * from "테이블명"		# sql 데이터 실행 명령

 

위의 명령을 sql 에서 실행하게 되면 해당 테이블의 데이터를 보기 좋게 출력해준다

하지만 python 에서 db 파일을 읽기 위해선 특정 명령이 필요하다

파일을 읽는 것 뿐만 아니라 python 에서 특정 행동을 취할 수 있는 여러 명령이 있는데

해당 명령들을 살펴본 후, 응용해보자

 

먼저 우리가 가장 위에 작성한 명령문을 살펴보면

sql 을 내가 가진 경로의 파일과 connect 시켜주고

cmd 라는 변수에 connect 된 파일의 커서를 지정했다

변수가 꼭 cmd 여야 하는 것은 아니지만 가장 많이 쓰이는 명령이므로 쉬운 변수로 염두해두자

이 cmd 를 활용하여 여러 행동을 취할 수 있는데 그 명령어들은 아래와 같다

 

cmd.execute("sql 실행문")		# sql 에서 쓰던 실행문을 그대로 써주면 된다(select, insert, update, delete ...)
cmd.fetchone()		# execute 시킨 실행문에 해당하는 데이터의 1개 레코드 불러오기
cmd.fetchall()		# execute 시킨 실행문에 해당하는 데이터의 모든 레코드 불러오기
cmd.fetchmany()		# execute 시킨 실행문에 해당하는 데이터의 여러 레코드 불러오기

 

에디터 안에서 cmd. 만 쳐봐도 많은 메소드들이 있지만 우선적으로 위 코드에 대해 실행하고 알아보도록 하자

 

[ cmd.execute("sql 실행문") ]

여기서 의미하는 sql 실행문은 말 그대로 sql 에서 데이터 정제 혹은 미리보기를 위해 시행했던 코드들을 의미한다

 

ex) select * from "table name"

: "table name" 에 해당하는 테이블의 모든 데이터를 보여준다

 

이 select * from "table name" 을 execute 괄호 안에 써주면 해당 sql 명령을 python 에서 말 그대로 실행 가능케 해준다

이 실행문 안에는 select, insert, upload, delete 등 sql 실행문에 해당하는 명령을 기입할 수 있고,

필요에 따라 바꾸어 주며 execute 시켜준다

 

현재 우리가 하고자 하는 것은 db 파일의 데이터를 모두 보고 출력하려고 하는 것이기에 해당하는 select 구문을 활용한다

 

 

import sqlite3 as sql
conn = sql.connect("file path")			# file path : db 파일이 존재하고 있는 경로
cmd = conn.cursor()

cmd.execute("select * from sample")		# sample : 열고자 하는 db 파일의 table name

이렇게 execute 해준 테이블을 그대로 출력해보면 외계어처럼 출력이 되고

중간에 알아볼 수 있는 설명은 어떠한 존재가 object 로 설정되었다는 건 알아볼 수 있을 것이다

 

※ execute 만으로는 데이터의 내용을 출력할 순 없는데

이는 버퍼라는 임의의 공간에 데이터가 저장되어 있을  뿐, 출력되지는 못하는 상태이기 때문이다

(틀린 내용이 있으면 언제든지 지적 환영입니다)

 

이 execute 된 데이터를 fetch 명령어를 통해 버퍼에서 가지고 오게 되고,

fetch 된 데이터를 python 에서 print() 를 활용하여 출력해주면

정상적으로 모습을 확인할 수 있다

 

아래는 위 내용을 코드로 작성한 모습이다

 

import sqlite3 as sql
conn = sql.connect("file path")
cmd = conn.cursor()

cmd.execute("select * from sample")
l = cmd.fetchall()
print(l)

# 결과 : [(1, 'James', '빨래바구니', 'vjr932'), (2, '무야호', '세탁기', 'ipc837'), (3, 'Chris', '영문책', 'hgn537'), (4, '그리핀도르', '모자', 'skv443')]

 

cmd.fetchall() 이란 명령어를 l 이란 변수에 넣고

l 을 출력했을 때의 결과값은 위 주석과 같다

 

잘 살펴보면 해당 글 가장 위에 보여진 데이터의 레코드를 그대로 가져왔으며, 필드명은 가져오지 않는다

또한 리스트 안의 값으로 들어오지만 각 레코드는 tuple 형태로 이루어져 있다

 

 

▷ cmd.fetchone()

import sqlite3 as sql
conn = sql.connect("file path")
cmd = conn.cursor()

cmd.execute("select * from sample)
l = cmd.fetchone()
print(l)

# 결과 : (1, 'James', '빨래바구니', 'vjr932')

fetchone() 의 경우 1개의 레코드를 1개의 튜플로 반환한다

'Python' 카테고리의 다른 글

Python 클래스와 객체  (0) 2023.03.05
Python 과 File  (0) 2022.09.07
파이썬 딕셔너리(Python Dictionary)  (0) 2022.09.06
튜플(Tuple)  (0) 2022.09.06