아미(아름다운미소)

SQLite - 단순하게 만든 데이터베이스 본문

랭귀지/python

SQLite - 단순하게 만든 데이터베이스

유키공 2017. 12. 19. 13:52

SQLite 엄청난 데이터베이스 엔진이다.   진심이다.


몇가지 단점이 있다: 

  • 병행 접근용으로 디자인되어 있지 않다 (쓰는 동안 데이터베이스 전체가 잠긴다). 
  • 지역적으로만 작동한다 (네트워크 서비스가 없다. 물론 sqlrelay 같은 사용할 있다). 
  • 외래 키를 처리하지 못한다. 
  • 권한 관리가 없다 (grant/revoke). 

장점은 다음과 같다:

  • 아주 빠르다 (대부분의 연산에서 mySQL보다 빠르다). 
  • SQL-92 표준을 대부분 준수한다. 
  • 서비스를 설치할 필요가 없다. 
  • 데이터베이스 관리를 수행할 필요가 없다. 
  • 사용되지 않을 때에는 컴퓨터 메모리와 CPU 소비하지 않는다. 
  • SQLite 데이터베이스는 간결하다 
  • 데이터베이스 = 1 파일 (손쉽게 이동/배치/백업/전송/이메일 처리를 있다). 
  • SQLite 데이터베이스는 프랫폼마다 호환성이 있다 (Windows, MacOS, Linux, PDA...) 
  • SQLite ACID이다 (컴퓨터가 꺼지거나 충돌할 경우에도 데이터 일관성이 보장된다) 
  • 트랜잭션을 지원한다 
  • 필드에 Nulls, 정수, 실수 (부동소수점수), 텍스트 또는 이진데이터(blob) 저장할 있다). 
  •  2 테라-바이트까지 데이터를 처리할 있다 (그렇지만 12 Gb 넘어서면 권장하지 않는다). 
  • 메모리- 데이터베이스처럼 작동한다 (수행성능이 눈부시다!) 

SQLite 아주 빠르고, 아주 간결하며, 쉽게 사용할 있다. 지역 데이터 처리를 위해서라면 신이 주신 선물이다 (웹사이트, 데이터 분석, 등등.).
물론... 무료일 뿐만 아니라, 또한 공개 영역에 위치한다 (GPL 라이센스로 고민할 필요도 없다).
아주 마음에 든다.

SQLite
엔진은 다양한 언어로부터 접근이 가능하다. (그리하여 SQLite 데이터베이스는 또한 프로그램 사이에 다양한 언어로 작성된 복잡한 데이터 세트를 교환하기에 훌륭한 방법이기도 하다. 심지어 숫치/텍스트/이진 데이터로 서로 섞여 있어도 된다. base64-인코드된 데이터로 특별한 파일 포맷이나 복잡한 XML 스키마를 고안할 필요도 없다.)

SQLite
파이썬 2.5 임베드되어 있다.
파이썬 2.4 이전이라면, 따로 설치해야 한다http://initd.org/tracker/pysqlite

다음은 기본적인 사용법이다:

#!/usr/bin/python
# -*- coding: iso-8859-1 -*-
from sqlite3 import dbapi2 as sqlite

#
데이터베이스를 만든다:
con = sqlite.connect('mydatabase.db3')
cur = con.cursor()

#
테이블을 만든다:
cur.execute('create table clients (id INT PRIMARY KEY, name CHAR(60))')

#
하나를 삽입한다:
client = (5,"John Smith")
cur.execute("insert into clients (id, name) values (?, ?)", client )
con.commit()

#
번에 여러 줄을 삽입한다:
clients = [ (7,"Ella Fitzgerald"),
            (8,"Louis Armstrong"),
            (9,"Miles Davis")
          ]
cur.executemany("insert into clients (id, name) values (?, ?)", clients )
con.commit()

cur.close()
con.close()

이제, 데이터베이스를 사용해 보자:

#!/usr/bin/python
# -*- coding: iso-8859-1 -*-
from sqlite3 import dbapi2 as sqlite

#
기존의 데이터베이스에 접속한다
con = sqlite.connect('mydatabase.db3')
cur = con.cursor()

#
행단위로 얻는다
print "Row by row:"
cur.execute('select id, name from clients order by name;')
row = cur.fetchone()
while row:
    print row
    row = cur.fetchone()

#
한번에 모든 행을 얻는다:
print "All rows at once:"
cur.execute('select id, name from clients order by name;')
print cur.fetchall()

cur.close()
con.close()


다음과 같이 출력된다:

Row by row:
(7, u'Ella Fitzgerald')
(5, u'John Smith')
(8, u'Louis Armstrong')
(9, u'Miles Davis')
All rows at once:
[(7, u'Ella Fitzgerald'), (5, u'John Smith'), (8, u'Louis Armstrong'), (9, u'Miles Davis')]



데이터베이스를 만들고 기존의 데이터베이스에 접속하는 것은 같은 명령을 사용한다(sqlite.connect()).

윈도우즈에는 SQLite 데이터베이스를 관리하기 위한 멋진 프리웨어가 있다: SQLiteSpy 그것이다. (http://www.zeitungsjunge.de/delphi/sqlitespy/)

힌트 1: sqlite.connect(':memory:') 사용하면, 이는 메모리- 데이터베이스를 생성한다. 디스크에 접근하지 않으므로, 이렇게 하면 아주 데이터베이스가 빠르다.
(
그러나 데이터를 처리하기 위한 메모리가 충분히 있는지 확인하자.)


힌트 2: 프로그램을 Python 2.5 그리고 Python 2.4+pySqlLite 호환되게 하려면, 다음과 같이 하자:

try: 
    from sqlite3 import dbapi2 as sqlite    #
파이썬 2.5
except ImportError:
    pass

if not sqlite:
    try:
        from pysqlite2 import dbapi2 as sqlite  #
파이썬 2.4 그리고 pySqlLite
    except ImportError:
        pass

if not sqlite:  #
모듈 반입에 성공하지 못하면, 에러를 일으킨다.
    raise ImportError, "This module requires either: Python 2.5 or Python 2.4 with the pySqlLite module (http://initd.org/tracker/pysqlite)"

#
그렇다면 사용한다
con = sqlite.connect("mydatabase.db3")
...

이런 식으로, sqlite 파이썬 2.5 2.4에서 실행될 때마다 적절하게 반입된다.


링크:


Comments