18-1 Sqlite3 > 파이썬 기초

본문 바로가기

사이트 내 전체검색

이전으로파이썬 기초

18-1 Sqlite3

페이지정보

글쓴이 관리자 조회 37,188 조회 날짜 19-06-12 21:42 / U:19-06-19 22:44
댓글 0댓글

SNS 공유

  • 트위터로 보내기
  • 페이스북으로 보내기
  • 구글플러스로 보내기
  • 카카오톡으로 보내기

내용

Sqlite3

 

Sqlite3는 DBMS와 같이 별도의 DB 서버 없이 동작하는 경량 DB엔진이다.

db 파일이 하나의 database가 되며, 내부에 테이블을 생성하여 사용할 수 있다.

Python을 설치하면 기본적으로 내장되어 있으며, sqlite3를 import하여 사용할 수 있다.

 

Database에 대한 기초지식은 https://www.jbmpa.com/python_basic/27 에서 확인한다.

 

sqlite3 import

import sqlite3 as sq

 

 

데이터베이스 접속 또는 생성

conn = sq.connect("AAA.db")
cur = conn.cursor()

 

conn.close()

데이터베이스 접속은 간단하다.

import한 sqlite3의 connect 메서드를 사용하며, database 이름만 적어주면 된다.

만약 위치한 곳에 데이터베이스가 없다면, 새로운 데이터베이스가 생성된다.

cursor()는 생성한 db 커넥션 객체에 커서를 생성한다. 커서는 데이터베이스를 사용하는 위치라고 이해하면 된다.

 

데이터베이스를 연결하고 사용이 끝났으면, 커넥션을 종료해준다. 종료 명령은 conn.close() 이다. 

 

 

테이블 생성

sql = "CREATE TABLE aaa (idx INTEGER PRIMARY KEY, name TEXT, age INTEGER)"
cur.execute(sql)
conn.commit()

테이블 생성 쿼리문을 만들어서 실행해준다.

cur 객체의 execute() 메서드를 이용하여 쿼리문을 실행한다.

실행한 쿼리문을 완료하기 위해서 commit()을 실행한다.

 

 

데이터 입력

sql = "INSERT INTO aaa (name, age) VALUES (?,?)"
cur.execute(sql, (name, age))

conn.commit()

데이터 입력 쿼리문을 만들어서 실행한다.

쿼리에 들어갈 데이터는 동적으로 매개변수에 받아서 처리하는 경우가 많으므로, 입력할 데이터를 ? 마크를 통해서 입력처리한다.

?로 처리된 위치에는 execute() 메서드의 두번째 인자로 넣어준다. 두번째 인자는 튜플 형태로 물음표 수만큼 넣어준다.

idx 칼럼은 PRIMARY KEY로 생성했기 때문에 아무런 값을 넣지 않으면 자동으로 숫자가 1씩 증가되면서 입력된다.

 

 

데이터 업데이트

sql = "UPDATE aaa set name=? WHERE idx = " str(idx)
cur.execute(sql, (name,))
conn.commit()

데이터 업데이트도 데이터 입력과 같은 형태로 쿼리문을 만들어서 실행한다.

execute() 메서드의 두번째 인자는 튜플형태라고 하였다.

튜플형태로 인자를 넣어줄 때 주의할 점은 튜플 안에 한개의 인자만 존재할 때는 한개의 인자뒤에 (,) 쉼표를 넣어줘야 한다.

만약 한개의 인자뒤에 쉼표를 넣지 않을때는 python에서는 튜플로 인식하지 않는다.

 

 

데이터 삭제

sql = "DELETE FROM aaa WHERE idx =?"
cur.execute(sql, (idx,))
conn.commit()

데이터 삭제 쿼리문도 데이터 입력, 데이터 업데이트와 동일한 방식으로 실행한다.

 

 

데이터 추출

sql = "SELECT name FROM aaa"
cur.execute(sql)
rows = cur.fetchall()

SELECT 구문은 쿼리문이 실행된 후에 그 결과를 받아온다.

따라서 쿼리문을 execute() 메서드로 실행한 다음, 그 결과를 모두 추출하여 리스트에 담아야 한다.

cur.fetchall()은 SELECT 구문에 의해 생성된 결과 모두를 리스트로 추출하는 메서드이다.

결과를 rows라는 변수에 리스트로 저장한다.

이후 rows 리스트를 이용하여 원하는 결과를 가공하면 된다.

결과는 각 Row의 column 쌍은 튜플로, 각 튜플은 리스트에 저장된다.

 

 

 

 

실제 예제

import sqlite3 as sq

 

def CreateTable():
    conn = sq.connect("AAA.db")
    cur = conn.cursor()


    #AAA.db에 aaa라는 테이블이 있는지 sqlite3의 마스터 테이블에서 정보를 받아온다.
    sql = "SELECT name FROM sqlite_master WHERE type='table' AND name ='aaa'"
    cur.execute(sql)
    rows = cur.fetchall()
        
    #aaa 테이블이 없으면 새로 생성하고 있으면 통과
    if not rows:        
        sql = "CREATE TABLE aaa (idx INTEGER PRIMARY KEY, name TEXT, age INTEGER)"
        cur.execute(sql)
        conn.commit()
    
    conn.close()
    
def InsertData(name, age):    
    conn = sq.connect("AAA.db")
    cur = conn.cursor()
    
    sql = "INSERT INTO aaa (name, age) VALUES (?,?)"
    cur.execute(sql, (name, age))
    conn.commit()
    
    conn.close()
    
def UpdateName(name, idx):    
    conn = sq.connect("AAA.db")
    cur = conn.cursor()
    
    sql = "UPDATE aaa set name=? WHERE idx = "+str(idx)
    cur.execute(sql, (name,))
    conn.commit()
    
    conn.close()
    
def DeleteData(idx):    
    conn = sq.connect("AAA.db")
    cur = conn.cursor()
    
    sql = "DELETE FROM aaa WHERE idx =?"
    cur.execute(sql, (idx,))
    conn.commit()
    
    conn.close()
    
def SelectData():
    conn = sq.connect("AAA.db")
    cur = conn.cursor()
    
    sql = "SELECT * FROM aaa"
    cur.execute(sql)
    rows = cur.fetchall()        
    
    conn.close()
    
    return rows


# 데이터베이스 테스트
CreateTable()
InsertData("Maru", 8)
InsertData("Seulchan", 7)
InsertData("Sun", 10)
InsertData("Moon", 14)
print(SelectData())

 

UpdateName("Maru Jung", 1)
print(SelectData())

 

DeleteData(3)
print(SelectData())

 

위의 코드로 저장된 데이터를 테이블로 나타내면 아래와 같다.

 

1269734546_1560395109.6507.png

 

Select 구문으로 추출된 결과는 리스트로 된 튜플로 나타난다.

 

"SELECT * FROM aaa"

===> 

[  (1, 'Maru', 8), (2, 'Seulchan', 7), (3, 'Sun', 10), (4, 'Moon', 14) ]

 

 

 

1269734546_1560409214.3298.png

 

 

 

********************************************

 

Sqlite3로 생성된 db 파일을 볼 수 있는 유용한 툴이 있다.

 

DB Browser for SQLite라는 프로그램으로 아래의 링크에서 다운 받아 설치할 수 있다.

 

https://sqlitebrowser.org/

 

 

아래의 그림은 DB Browser for SQLite 툴을 이용하여 AAA.db 파일을 열어본 결과이다.

 

1269734546_1560401034.5353.png

 

 

1269734546_1560401047.3907.png

 

 

********************************************

 

QTableWidget과 Database 연동 예제 - https://www.jbmpa.com/pyside2/7

댓글목록

댓글이 없습니다

게시물 검색
총 30 건 , 1 페이지
올서베이넷
무료 온라인 설문 사이트
OVITII
웹 프레젠테이션 도구
Copyright © JBMPA.com All rights reserved.
사이트 언어 선택
PC 보기