본문 바로가기
블록체인/[파공블]파이썬으로 공부하는 블록체인

0. Python 기초 - DB 이해하고 만들기(sqlite3)

by 일등박사 2022. 6. 9.
728x90

Pandas를 이해하고 계실 독자여러분!!

db에 대하여 익숙하신가요!?

 

Database의 약자인  DB. 

사실 저는 아직도 DB 보다는 csv로 저장하는 것이 편한것 같아요!!^^;

db로 저장되면 어디에 어떻게 저장된지도 모르겠고

어렵게 코드를 써서 확인이 가능하지요!

반면 CSV로 저장하면 파일이 생기는것을 바로바로 볼수도 있고

메모장 혹은 엑세로 열어보아 내용도 확인할 수 있어

익숙하고 편리하여 참 좋은것 같은데요~!

 

이후

△ 점점 데이터가 커지고

△ 여러 프로세스에서 동시에 접근해야하고 

△ 문장, dictionary 등 데이터 양식 다양화 

등의 문제로 Database에 저장하는것의 장점이 발생하게됩니다!

 

실제 비트코인은 levelDB 이더리움은 rocksdb를 사용하고있습니다!

우리는 파이썬에서 쉽게 활용할 수 있는

mysql 형식의 sqlite3 DB를 활용할 에정이구요!

이번 챕터에서는 csv저장과 비교해보며 학습해보겠습니다!

 

우선 Pandas로 간단한 거래내역을 dataframe을 만들고

csv로 저장한 뒤 다시 읽어 보아요!

import pandas as pd

df = pd.DataFrame()
df['seller'] = pd.Series(['tom','james','kaka'])
df['buyer'] = pd.Series(['pepe','alex','mike'])
df['amount'] = pd.Series([10,30,20])
df.to_csv('sample_transaction.csv')
pd.read_csv('sample_transaction.csv',index_col=0)

파일이 sample.csv로 잘 저장되고, 저장했던 파일이 잘 읽어와 짐을 확인할 수 있는데요~!

같은 내용을 sqlite3를 활용하여 DB에 저장해보겠습니다!

import sqlite3

conn = sqlite3.connect('sample.db')

df = pd.DataFrame()
df['seller'] = pd.Series(['tom','james','kaka'])
df['buyer'] = pd.Series(['pepe','alex','mike'])
df['amount'] = pd.Series([10,30,20])
df.to_sql('test_transaction', conn)

df = pd.read_sql_query("SELECT * FROM test_transaction ", conn)
df

위와 같은 코드를 통하여 실제로 sample.db라는 피일이 생기고

 

데이터를 알맞게 불러올수 있음을 확인할 수 있었습니다!

또한 SQL 쿼리문을 통하여 필요한 데이터만을 불러올 수도 있지요!

판매자가 tom 인 데이터만 불러오기!

sqlite3를 통하여 어떻게 데이터를 저장하고 불러오는지, 이해가 되셨나요!?

 

최종적으로 정리하자면  아래와 같이 3부분으로 구성이 됩니다!!

 

1. DB 접속하기 

import sqlite3
# conn 이라는 변수에 connection을 둡니다!
conn = sqlite3.connect('sample.db')

2. DataFrame을 Table에 저장하기 ( csv 파일 저장하기와 유사)

df = pd.DataFrame()
df['seller'] = pd.Series(['tom','james','kaka'])
df['buyer'] = pd.Series(['pepe','alex','mike'])
df['amount'] = pd.Series([10,30,20])

# conn의 connection에서 test_transaction라는 Table을 저장합니다 
df.to_sql('test_transaction', conn)

 

3. 쿼리문을 Table 에서 DataFrame불러오기 

# con 의 connection 에 쿼리문(test테이블에서seller = 'tom'인 데이터를 불러와라)을 사용해서 데이터 호출
df = pd.read_sql_query("SELECT * FROM test_transaction where seller = 'tom' ", conn)
df
728x90

댓글