[Python] 20. [DBMS] 데이터베이스 개론, SQLite3 사용

2017. 8. 2. 18:40·빅데이터 프로그래밍/Python
728x90
반응형

01. 데이터베이스시스템 개론(DBMS)

- 우리가 일상 업무나 생활에서 발생하는 데이터를 컴퓨터 기반의 데이터 
저장소를 만들고 저장, 조회, 수정, 삭제, 통계를 제공하는 컴퓨터 시스템(SW).
 
1. 데이터를 저장하기위한 테이블(엔티티)의 구조
   - 데이터베이스의 구성요소이며 하나 이상이 존재 할 수 있습니다.
   - 2차원 배열의 표 형태를 가지고 있습니다.
   - Record는 Column의 집합입니다.
   - Table(entity)은 Record의 집합입니다.
   - Database는 계정과 테이블의 집합입니다.
   - 엑셀과 같은 구조임으로 엑셀을 사용하는 기업은 쉽게 정보화를 추진할 수
     있습니다.
   - 하나의 Excel 파일은 하나의 Database 파일과 대응합니다. 엑셀파일안의
     sheet는 하나의 table과 대응합니다.
no name   wdate       subject      passwd <- 컬럼, 열
   -----------------------------------------------------------------
   1  가길동 2005-01-01  안녕하세요.  123    <-- 레코드, 행
   2  나길순 2005-01-02  반갑습니다.  123$
   3  다길순 2005-01-01  안녕하세요.  123
   4  라길동 2005-01-02  반갑습니다.  123$
   5  마길동 2005-01-01  안녕하세요.  123
   6  바길순 2005-12-02  반갑습니다.  123$
                                       ↖
                                        엑셀 Sheet  
                                        테이블 -> 데이터베이스 -> 빅데이터 -> 예측 시스템 -> 인공지능
                                        회원        (기업)               (글로벌 기업, 국가 단위) 
                                        게시판 
                                        자료실
                                        갤러리
                                        MP4 플레이어
                                        설문조사 
                                        급여관리
                                        자재관리
                                        입고관리
                                        출고관리
                                        매출관리
                                        리조트 
                                        예약 
                                        펜션 
                                        상품...

 

02. SQLite3 설치
- 메모리 및 파일 기반의 임베디드 데이터 베이스.
- 데이터베이스 서버를 독립적으로 구성하지않고 application과 함께 배포함.
- 안드로이드, IPhone등에서도 바로 사용 할 수있는 모듈 지원.
 
1. https://www.sqlite.org
   
2. Precompiled Binaries for Windows 
sqlite-tools-win32-x86-3180000.zip 다운로드
  
3.  모듈함수
– sqlite3.connect(database[, timeout, detect_types, isolation_level, check_same_thread, – factory, cached_statements]) : SQLite3 DB와 연결된 Connection 객체반환
– sqlite3.complete_statement(sql) : 세미콜론으로 끝나는 sql 문에 대해 True를 반환(구문확인은 안함)
    
4. Connection 클래스 : 연결된 DB응 동작
– cursor([cursorClass]) : cursor 객체를 생성
– commit() : 트렌젝션의 변경내용을 DB에 반영
– rollback() : 트렌젝션의 변경내용을 DB에 반영하지 않음
– close() : DB 연결을 종료
– isolation_level : 트렌젝션 경리수준을 확인, 설정
– execute(sql[, parameters]) : 임시 cursor 객체에 sql 문을 실행
– executemany(sql[, parameters]) : 임시 cursor 객체에 동일한 sql 문에 파라미터를 변경하여 실행
– executescript(sql_script) : 임시 cursor 객체에 세미콜론으로 구분된 여러줄의 sql 문을 실행
– create_aggregate(name, num_params, aggregate_class) : 사용자 정의 집계함수를 생성
– create_collation(name, callable) : 문자열 정렬시 sql 에서 사용하될 이름(name)과 정렬함수를 지정
– iterdump() : 연결된 DB의 내용을 sQL 질의 현태로 출력할수 있는 이터레이터를 반환
 
5. Cursor 클래스 : 실제적으로 DB의 sql 구문을 실행시키고 조회된 결과를 가져옴
– execute(sql[, parameters]) : cursor 객체에 sql 문을 실행
– executemany(sql[, parameters]) : cursor 객체에 동일한 sql 문에 파라미터를 변경하여 실행
– executescript(sql_script) : cursor 객체에 세미콜론으로 구분된 여러줄의 sql 문을 실행
– fetchone() : 조회된 결과로 부터 데이터 1개를 반환
– fetchmany(size=cursor.arraysize) : 조회된 결과로 부터 입력받은 size 만큼의 데이터 리스트를 반환
– fetchall() : 조회된 결과 모두를 리스트형태로 반환

6. Row 클래스 : 조회된 결과 집합에서 튜플을 나타냄

7. 데이터 타입

1) 내부에 저장되는 타입

   NULL: 값이 NULL인 경우. 
   INTEGER: 부호 있는 정수. 상황에 따라 1, 2, 3, 4, 6, 8 바이트가 됨. 
   REAL: 부동소수점. IEEE 부동소수 규격에 따른 8바이트. 
   TEXT: 문자(열). 기본적으로 UTF-8으로 저장되며 UTF-16 BE나 UTF-16 LE를 사용할 수 있음. 
   BLOB: 이진 데이터. 외부에서 전달된 데이터를 그대로 저장됨.
 
2) 테이블 생성시 명시되는 타입
- http://www.sqlite.org/datatype3.html
 

8. PK 컬럼의 자동 생성
- 1부터 자동증가하여 레코드를 고유하게 구분하는 PK 컬럼의 값으로 사용됨.
/Home 폴더/sqlite3>sqlite3.exe test.db  ← 테이블 생성시 test.db 파일이 없으면 생성됨.

CREATE TABLE COMPANY(

   ID INTEGER PRIMARY KEY   AUTOINCREMENT,
   NAME           TEXT      NOT NULL,
   AGE              INT       NOT NULL,
   ADDRESS       CHAR(50) ,
   SALARY         REAL
);
 
INSERT INTO COMPANY (NAME,AGE,ADDRESS,SALARY)
VALUES ( 'Paul', 32, 'California', 20000.00 ) ;
 
INSERT INTO COMPANY (NAME,AGE,ADDRESS,SALARY)
VALUES ('Allen', 25, 'Texas', 15000.00 ) ;
 
INSERT INTO COMPANY (NAME,AGE,ADDRESS,SALARY)
VALUES ('Teddy', 23, 'Norway', 20000.00 ) ;
 
 
SELECT ID, NAME,AGE,ADDRESS,SALARY
FROM COMPANY
ORDER BY ID ASC;
 
1|Paul|32|California|20000.0
2|Allen|25|Texas|15000.0
3|Teddy|23|Norway|20000.0

 

03. Sqlite3 Eclipse 연동 설정
1. Client tool 설치
- DB Browser for SQLite 3.9.1 은 한글 깨짐(비권장)
  
2. Sqlite JDBC library 다운로드
- https://bitbucket.org/xerial/sqlite-jdbc/downloads/
  sqlite-jdbc-3.16.1.jar 다운로드
 
3. Eclipse 설정 
1) View 열기

2) Data Source Explorer 열기
3) New Connection Profile 생성
4) SQlite 선택 Name 값은 파일명등 입력
5) 드라이버 신규 등록 

* 기존 jar 경로 변경시 'Edit Driver Definition' 선택하여 변경 등록
6) 데이터베이스 드라이버 종류 지정
7) 기존 jar 파일 삭제후 아래 화면처럼 다운로드받은 jar 등록
8) 'test.db' 파일명 집적 입력, [Test Connection] 버튼 클릭하여 'Ping Succeed' 출력 확인
9) sql 파일의 생성, 확장가SQL, DDL 이어야함.
10. 실행할 SQL 블럭 지정후 Popup 메뉴에서 'Execute Selected Text' 선택
11) SQL 실행 결과의 확인

4. SQL 실습

▷ /Home/ws_python/oop/sqlite3/test.sql
 -------------------------------------------------------------------------------------
1) 테이블 생성
CREATE TABLE `phonebook` (
`name` INTEGER NOT NULL,
`phone` TEXT NOT NULL,
`email` TEXT NOT NULL,
PRIMARY KEY(`email`)
);
 
2) INSERT
INSERT INTO phonebook(name, phone, email)
VALUES('가길동', '000-111-1111', 'mail1@mail.com');
 
INSERT INTO phonebook(name, phone, email)
VALUES('나길동', '000-111-1111', 'mail2@mail.com');

INSERT INTO phonebook(name, phone, email)
VALUES('다길순', '000-111-1111', 'mail3@mail.com');
  
3) SELECT
SELECT name, phone, email
FROM phonebook
ORDER BY name ASC;

 
SELECT name, phone, email
FROM phonebook
WHERE name="가길동";

SELECT name, phone, email
FROM phonebook
LIMIT 2 OFFSET 1
  
4) UPDATE
UPDATE phonebook 
SET name = '왕눈이'
WHERE email='mail1@mail.com';
  
5) DELETE
DELETE FROM phonebook 
WHERE email='mail1@mail.com';
 
6) 테이블 삭제
DROP TABLE phonebook;
-------------------------------------------------------------------------------------

 

5. id값의 생성과 사용

▷ /Home/ws_python/oop/sqlite3/test_id.sql
-------------------------------------------------------------------------------------
CREATE TABLE IF NOT EXISTS movie(
  movie_id INTEGER PRIMARY KEY AUTOINCREMENT,
  name TEXT,
  country  TEXT
)
 
CREATE TABLE IF NOT EXISTS actor(
  actor_id INTEGER PRIMARY KEY AUTOINCREMENT,
  movie_id INTEGER,
  name TEXT,
  gender  TEXT,
  FOREIGN KEY(movie_id) REFERENCES movie(movie_id)
)
 
INSERT INTO movie(movie_id, name, country)
VALUES(NULL, '월터의 상상은 현실이된다.', '미국');
 
SELECT movie_id, name, country 
FROM movie
ORDER BY movie_id ASC;
 
 movie_id name           country
 -------- -------------- -------
        1 월터의 상상은 현실이된다. 미국
        
        
INSERT INTO actor(movie_id, name, gender)
VALUES(1, '벤스틸러', '남자');
 
INSERT INTO actor(movie_id, name, gender)
VALUES(2, '크리스튼 위그', '여자');
 
SELECT actor_id, movie_id, name, gender
FROM actor
ORDER BY actor_id ASC;        
 
 actor_id movie_id name    gender
 -------- -------- ------- ------
        1        1 벤스틸러    남자
        2        2 크리스튼 위그 여자  ← Foreigh Key가 정상 작동하지 않음.
        
 
DELETE FROM movie 
WHERE movie_id=1;    ← Foreigh Key가 정상 작동하지 않음.
 
-- 부모 연결 없는 자식 레코드 발생.
SELECT actor_id, movie_id, name, gender
FROM actor
ORDER BY actor_id ASC;              
 

-- sequence 실습
SELECT movie_id, name, country 
FROM movie
ORDER BY movie_id ASC;
 
-- 한번 생성된 일련번호는 초기 상태로 갈 수 없음. 증가만 됨.
INSERT INTO movie(movie_id, name, country)
VALUES(NULL, '인턴', '미국');
 
SELECT movie_id, name, country 
FROM movie
ORDER BY movie_id ASC;
 
 movie_id name country
 -------- ---- -------
        2 인턴   미국
        
 
-------------------------------------------------------------------------------------

728x90
반응형

'빅데이터 프로그래밍 > Python' 카테고리의 다른 글

[Python] 22. [DBMS] Sqlite3 + Python 연동 실습, 140자 일기장 만들기  (0) 2017.08.05
[Python] 21. [DBMS] Sqlite3 + Python 연동 실습  (0) 2017.08.05
[Python] 19. [GUI] wxPython 그래픽 사용자 인터페이스, 다양한 Widget, Menu  (0) 2017.08.02
[Python] 18. [GUI] wxPython 그래픽 사용자 인터페이스, 기본 Widget, Sizer  (0) 2017.08.02
[Python] 17. [Network] threading module, 채팅 서버/클라이언트 제작  (0) 2017.08.02
'빅데이터 프로그래밍/Python' 카테고리의 다른 글
  • [Python] 22. [DBMS] Sqlite3 + Python 연동 실습, 140자 일기장 만들기
  • [Python] 21. [DBMS] Sqlite3 + Python 연동 실습
  • [Python] 19. [GUI] wxPython 그래픽 사용자 인터페이스, 다양한 Widget, Menu
  • [Python] 18. [GUI] wxPython 그래픽 사용자 인터페이스, 기본 Widget, Sizer
밍글링글링
밍글링글링
mingling - 밍글링, 밍글밍글링. 코드와 어우러지다. IT/ 프로그래밍/소스
    반응형
    250x250
  • 밍글링글링
    mingling
    밍글링글링
  • 전체
    오늘
    어제
    • 밍글링글링 (407) N
      • Flutter (2)
      • 일상생활 (8)
        • 리뷰 (1)
        • 생활정보 (4)
        • 맛집 (0)
        • 여행 (0)
        • 모든정보 (3)
      • JAVA (126)
        • 개념 (6)
        • 예제 (115)
        • Exception (2)
      • C (1)
        • C (1)
        • C++ (0)
        • C# (0)
      • JS (29)
        • JavaScript (18)
        • JQuery (5)
        • AJax (0)
        • NODE.JS (6)
        • Angular.JS 2.0 (0)
      • WEB (87)
        • HTML (6)
        • CSS (61)
        • JSP (20)
        • JSTL (0)
      • FrameWork (8)
        • Spring (8)
        • BootStrap (0)
        • MyBATIS (0)
        • JUnit (0)
      • 외부 라이브러리 (5)
      • 공유 소스 관리 (5)
        • Git (5)
        • SVN (0)
      • 빅데이터 프로그래밍 (37)
        • Python (37)
        • R Programming (0)
      • DB (7)
        • ORACLE (0)
        • MySql (6)
      • Development Tools (7)
        • StarUML (0)
        • eXERD (0)
        • Eclipse (4)
      • SKILL (6)
        • Migration (0)
        • Security (6)
      • MicroSoft (0)
        • Excel (0)
        • Word (0)
      • Android (0)
      • Server (21)
        • Ubuntu (5)
        • Linux (15)
      • IOS (0)
      • XML (0)
      • 미디어 (0)
      • 공지사항 (3)
      • NETWORK (1)
      • 게임 (4)
        • 피파 (1)
        • 리니지M (0)
        • 배틀그라운드 (1)
        • 듀랑고 (2)
      • 세상 이슈 (6)
      • 일렉트론 (0)
      • 대회 소식 (4)
      • 업무 (2)
      • Express, Vue (6)
      • docker (11)
      • svelte (3)
      • 블록체인 (1)
      • IT (10) N
      • Rust (0)
  • 블로그 메뉴

    • 홈
    • 태그
    • 미디어로그
    • 위치로그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    에디터 팁
    API 설계
    docker
    css tb
    Java Array
    svelte
    클론코딩
    vue 설치
    jsp include
    css perspective
    css list
    nginx
    gitlab 설치
    java casting
    Extension Bisect
    css table
    자바 배열
    브라우저 자동화
    css transition
    VS Code 팁
    ssl 인증서 발급
    ubuntu
    자바 객체 지향
    프런트엔드
    Node
    proxy pass
    티스토리 자동화
    css float
    rust linux
    오류
    nginx ssl 설정
    mysql db
    러스트
    리눅스 설치
    nginx ssl 적용
    jsp parameter
    css block
    AI 코딩 에이전트
    vue cli
    vscode
    servlet class
    Rust lang
    자바 for문
    자바 생성자
    자바 클래스
    React Compiler
    spring java
    자바 exception
    SSL 인증서
    lang rust
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.6
밍글링글링
[Python] 20. [DBMS] 데이터베이스 개론, SQLite3 사용
상단으로

티스토리툴바