sqlite란 1부
개발자 | 리처드 힙 |
---|---|
발표일 | 2000년 8월 |
최근 버전 | 3.19.2 / 2017년 5월 25일[1] |
프로그래밍 언어 | C |
운영 체제 | 크로스 플랫폼 |
크기 | ~275 kiB |
종류 | 관계형 데이터베이스 (임베디드) |
라이선스 | 퍼블릭 도메인[2] |
웹사이트 |
sqlite란?
mysql이나 postgreSQL와 같은 dbms지만 서버가아니라 응용프로그램에 넣어 사용하는 비교적 가벼운데이터베이스
api는 단순히 라이브러리를 호출하는 것만 있고,데이터를 저장하는데 하나의 파일만을 사용하는것이 특징
데이터 타입
파이썬 유형 | SQLite type |
---|---|
None | NULL |
int | INTEGER |
long | INTEGER |
float | REAL |
str (UTF8로 인코딩 됨) | TEXT |
unicode | TEXT |
buffer | BLOB |
사용방법
++ 다양한 모듈은 https://docs.python.org/2/library/sqlite3.html 에서 확인가능 ++
1.connection database를 나타내는 객체를 생성. example.db 파일에 데이터가 저장됨
저장된 데이터는 영구적이며 이후 세션에서도 사용 가능
import sqlite3 conn=sqlite3.connect("example.db")
2.connection을 하고난뒤 cursor객체를 만들고 cursor객체의 execute()메서드를 이용해 쿼리를 날릴 수 있음
c = conn.cursor() c.execute('''CREATE TABLE stocks (date text, trans text, symbol text, qty real, price real)''') c.execute("INSERT INTO stocks VALUES ('2006-01-05','BUY','RHAT',100,35.14)") conn.commit() conn.close()
**commit
database에서 transaction이란 논리적인 일의 단위를 말하는데 이러한 트랜잭션이 오류없이 실행되었따면 지금까지 실행한 모든작업을 '실제로' 수행하라는 명령어
3.쿼리를날릴때 db-api 매개 변수 대체를 사용하는것이 좋은데 그 이유는 아래 만화를 참고
symbol = 'RHAT' c.execute("SELECT * FROM stocks WHERE symbol = '%s'" % symbol) #이렇게하면 안된다 t = ('RHAT',) c.execute('SELECT * FROM stocks WHERE symbol=?', t) #이렇게 해야한다 print c.fetchone() purchases = [('2006-03-28', 'BUY', 'IBM', 1000, 45.00), ('2006-04-05', 'BUY', 'MSFT', 1000, 72.00), ('2006-04-06', 'SELL', 'IBM', 500, 53.00), ] c.executemany('INSERT INTO stocks VALUES (?,?,?,?,?)', purchases)
++코드설명++
**execitemany를 이용하여 여러개의 쿼리를 한번에 날릴수 있음
**fetchone()은 쿼리결과 값을 하나씩 받아오고 fetchall()을 사용하면 결과 목록을 가져옴
sqlite3.
complete_statement
(sql)로 쿼리문이 ;으로 닫혀서 입력되었는지 확인할 수 있음
import sqlite3 con = sqlite3.connect(":memory:") con.isolation_level = None cur = con.cursor() buffer = "" print ("Enter your SQL commands to execute in sqlite3.") print ("Enter a blank line to exit.") while True: line = input() if line == "": break buffer += line if sqlite3.complete_statement(buffer): try: buffer = buffer.strip() cur.execute(buffer) if buffer.lstrip().upper().startswith("SELECT"): print (cur.fetchall()) except sqlite3.Error as e: print ("An error occurred:", e.args[0]) buffer = "" else: print("쿼리문이 정확하지 않습니다") con.close()
출처 url
https://ko.wikipedia.org/wiki/SQLite
https://docs.python.org/2/library/sqlite3.html
http://m.blog.naver.com/woghdi8318/51124164