Python 데이터베이스 SQLite

조아연·2024년 10월 3일

MYSQL 문

각종 명령어로 데이터를 조정 할 수 있는 언어
(드랍, 크리에이트, 셀렉트, 인서트, 업데이트, 디렉트 등)

파이썬은 SQLite에 대한 라이브러리 기본 내장
별도의 패키지 설치 없이도 데이터베이스 프로그램밍 가능
접속 인터페이스를 제공하는 sqlite3 모듈만 import 하면 가능함
별도의 툴이 제공되지 않기때문에 모든 것을 스크립트로 처리해야하기 때문에 불편한점이 있음
SQLite가 초경량의 DBMS 라고는 해도 엄연한 관계형 데이터베이스(RDB) 엔진임

큰 데이터나 복잡한 데이터에는 사용이 맞지 않으나, DB의 요소들과 기본적인 내용 파악을 위해 활용


1. 데이터 집어넣기

import sqlite3

con = sqlite3.connect('addr.db')
# db 이름을 addr으로 임의로 지정 
# connetct : 생성과 동시에 접속하겠다.

cursor = con.cursor()

cursor.execute("DROP TABLE IF EXISTS tblAddr")
# 내가 테이블을 tbladdr로 만들껀데, 기존에 만들어 져있는게 있으면 드랍해라
# 구조 자체를 아에 지우는 작업 

cursor.execute("""CREATE TABLE tblAddr (name CHAR(16) PRIMARY KEY, phone CHAR(16), addr TEXT)""")
# 그러면 이거는 문자가 아니라, 특정 명령어, 대소문자 상관없음, 양 따옴표로 표기함

# 테이블을 만들 수 있는 명령어
# 이름을 PRIMATY KEY 기본 키로 설정하겠다.
# 프라이머키는 래코드를 구분할 수 있는 유일한 키가 되어야 하는데, 필더가 3개나 있으니까 구별 하기가 쉽지 않음
# 지금 것은 예시임, 네임이 중복될 수 있으니
# 프라이머리 키 예시로는 기업에서 쓰는 사번 등이 있음

# name CHAR(16) : 캐릭터 문자 타입으로 16자리를 마련해라
# phone CHAR(16) : 폰도 16자리를 마련해라
# addr TEXT : 주소는 텍스트로 제한없이 만들어라 

# 만들어진 테이블 안에 레코드를 넣어야 함
cursor.execute("INSERT INTO tblAddr VALUES('김상형','123-4567','오산')")
cursor.execute("INSERT INTO tblAddr VALUES('한경은','555-1004','수원')")
cursor.execute("INSERT INTO tblAddr VALUES('한주완','444-1092','대전')")

# 인서트 인트 벨류즈(값들을 넣어라)
# 다른 프로그래밍 언어도 동일
# 데이터는 넣었으나 저장된 것은 아님, 커밋하는 활동이 필요

con.commit()    # 저장하는 활동, 완료작업
cursor.close()  # 접속했으면 반드시 close로 데이터를 닫아줘야함
con.close()

2. 데이터 접근해서 호출


import sqlite3

con = sqlite3.connect('addr.db')
# addr.db에 접속한다.

cursor = con.cursor()
# 데이터베이스에 자료를 넣고 빼는 통로 

cursor.execute("SELECT * FROM tblAddr")
# * : 모든테이블을 검색하시오, tblAddr

table = cursor.fetchall()
# 테이블을 읽어서 table에 데이터를 집어넣어라

# fetchall 메소드는 한번에 모든 row를 읽음
# fetcall 읽고, 다시 읽을 때는 빈 리스트[ ] 반환

for record in table:
    print("이름 : %s, 전화 : %s, 주소 : %s" % record)
# 데이터가 많을 경우 하나하나 반환하기에 오래걸리니까 for문 사용

"""
이름 : 김상형, 전화 : 123-4567, 주소 : 오산
이름 : 한경은, 전화 : 555-1004, 주소 : 수원
이름 : 한주완, 전화 : 444-1092, 주소 : 대전

data1번 파일을 실행해야지 2번 데이터 노출
"""

cursor.close()
con.close()
# db를 열었으면 꼭 닫아야함

phymyadmin 같은 사이트를 통해 간단한 데이터 관리할 수 있음
각 db에 테이블을 넣어서 어떤 회원들이 들어왔나 관리자가 검색 할 수 있음 (셀렉츠)


3. 데이터 넣고 정렬해서 결과 호출

1번에서 만들어진 데이터를 토대로 호출해서 활용 가능

import sqlite3

con = sqlite3.connect('addr.db')
# addr.db에 접속한다.

cursor = con.cursor()
# 데이터베이스에 자료를 넣고 빼는 통로 

cursor.execute("SELECT * FROM tbladdr order by addr desc")
# order : 정렬하라, 디폴트 오름차순, 주소
# 내림차순 desc 

table = cursor.fetchall()
for record in table:
    print("이름 : %s, 전화: %s, 주소 : %s" % record)
          
cursor.close()
con.close()


# fetchall 메소드는 한번에 모든 row를 읽음
# fetcall 읽고, 다시 읽을 때는 빈 리스트[ ] 반환

4. 특정 조건에 맞는 데이터 호출

import sqlite3

con = sqlite3.connect('addr.db')
# addr.db에 접속한다.

cursor = con.cursor()
# 데이터베이스에 자료를 넣고 빼는 통로 

cursor.execute("SELECT addr FROM tbladdr WHERE name = '김상형'")
# select : 검색하시오, 조건에 맞는 주소만 
# WHERE 조건문 쓸 때 사용, 그 뒤에 조건문 더 나열 할 수 있음
# 특정 조건에 맞는 내용을 검색해라는 것도 SQR으로도 가능

record = cursor.fetchall()
# fetchone() 한줄 씩 읽을 때 사용

print("김상형은 %s 에 살고 있습니다." % record)
          
cursor.close()
con.close()


# 아까는 몽땅 한꺼번에 읽는 식
# 지금은 한줄 읽는 식

# 데이터가 있을 때 어떨 때 어떤 것을 많이 사는지의 데이터도 확인 할 수 있음

5. DB의 데이터 변경

import sqlite3

con = sqlite3.connect('addr.db')
# addr.db에 접속한다.

cursor = con.cursor()
# 데이터베이스에 자료를 넣고 빼는 통로 

cursor.execute("update tblAddr SET addr = '제주도' WHERE name = '김상형'")
# tbladdr에서 주소가 김상형인 사람의 주소를 변경해라 
# update : sqr 문
# select : 데이터베이스에서 데이터를 조회하기 위한 명령어

cursor.execute("SELECT * FROM tblAddr")
table = cursor.fetchall()

for record in table:
    print("이름 : %s, 전화 : %s, 주소 : %s" % record)

"""
실행 시 제주도로 바뀐 것을 볼 수 있음
이름 : 김상형, 전화: 123-4567, 주소 : 오산
이름 : 김상형, 전화 : 123-4567, 주소 : 제주도
"""

con.commit()          
cursor.close()
con.close()


6. 데이터 베이스 객체 생성/정렬/조회/변경/삭제


"""
DB 이름 : addr1
table 이름 : address
번호(문자형), 이름, 나이, 연락처, 주소
5개의 데이터

insert, select, update, delete

내림, 오름 정렬은 Ascending=False와 Ture 사용
"""

import sqlite3

con = sqlite3.connect('addr1.db') # addr1.db에 접속
cursor = con.cursor()  # 데이터베이스 통로 생성 

cursor.execute("drop table if exists tbladdr")
# drop : 객체 삭제
# execute : 실행 
# 객체를 삭제하는 동시에 실행시킨다.

cursor.execute("""create table tbladdr (number char(16) primary key, name char(16), age char(3), 
               phone char(16), adr text)""")
# create : 새로운 데이터 베이스 객체 생성
# 기본 키는 number, name, age, phone, addr 필터 생성

cursor.execute("insert into tbladdr values('1','김상형','22','1234-5612','오산')")
cursor.execute("insert into tbladdr values('2','한경은','21','5555-1004','수원')")
cursor.execute("insert into tbladdr values('3','한주완','23','444-1092','대전')")
cursor.execute("insert into tbladdr values('4','김주은','19','1112-1545','의정부')")
cursor.execute("insert into tbladdr values('5','희원조','30','6745-4545','인천')")\
# insert : 새로운 레코드 행 추가 
# values : insert into 와 데이터 삽입하는데 필요한 값들을 지정, 각 행에 대한 값을 나열
# 만들어진 테이블 안에 레코드 삽입 

con.commit() # 저장활동
cursor.close() # db 접속 close
con.close() # 통로 close


# -------------- 재접속

con =sqlite3.connect('addr1.db')  # addr1.db에 접속
cursor = con.cursor() # 통로 접속

cursor.execute("select * from tbladdr order by number desc")
# select : 데이터 조회  
# from : select와 같이 가져올 데이터 지정 
# order : 정렬
# desc : 내림차순 (미 기입 시 자동 오름차순)

# -------------- 데이터 조회 select 

table = cursor.fetchall()  
print("데이터 조회")
for record in table:
    print("번호 : %s, 이름 : %s, 나이 : %s, 폰번호 : %s, 주소: %s" % record)
# fatchall : 한번에 모든 row 읽음
# for 문으로 읽기 위해 변수 내 삽입

# -------------- 데이터 변경 update

cursor.execute("update tbladdr set name = '희원조' where age = '20'")
# update : 업데이트 할 테이블의 이름
# set : 업데이트 할 열과 새로운 값 지정
# where : 어떤 행을 업데이트 할지 조건 설정
# 중복되는 나이가 있다면 해당 데이터의 이름도 바꿔버림 

cursor.execute("select * from tbladdr")
# tbladdr 데이터베이스 전체적으로 조회 

table = cursor.fetchall()
print("데이터 변경")
for record in table:
    print("번호 : %s, 이름 : %s, 나이 : %s, 폰번호 : %s, 주소: %s" % record)

 # -------------- 데이터 삭제 delete

cursor.execute("delete from tbladdr where name = '김상형'")
cursor.execute("select * from tbladdr")
table = cursor.fetchall()
print("데이터 삭제")
for record in table:
    print("번호 : %s, 이름 : %s, 나이 : %s, 폰번호 : %s, 주소: %s" % record)

profile
비전공자 QA의 자기개발 공부노트

0개의 댓글