Python 표준 라이브러리 14 데이터베이스(sqlite3)

高洛峰
풀어 주다: 2016-11-23 11:39:11
원래의
1385명이 탐색했습니다.

Python에는 경량 관계형 데이터베이스 SQLite가 함께 제공됩니다. 이 데이터베이스는 SQL 언어를 사용합니다. 백엔드 데이터베이스로서 SQLite를 Python과 함께 사용하여 웹 사이트를 구축하거나 데이터 저장이 필요한 도구를 만들 수 있습니다. SQLite는 HTML5, 모바일 터미널 등 다른 분야에서도 널리 사용됩니다. Python 표준 라이브러리의 sqlite3은 이 데이터베이스에 대한 인터페이스를 제공합니다.

서점의 도서 카테고리와 가격을 저장하는 간단한 관계형 데이터베이스를 만들어 보겠습니다. 데이터베이스에는 두 개의 테이블이 포함되어 있습니다. 카테고리는 분류를 기록하는 데 사용되며 책은 특정 도서에 대한 정보를 기록하는 데 사용됩니다. 책은 특정 카테고리에 속하므로 책에는 카테고리 테이블의 기본 키 ID를 가리키는 외래 키가 있습니다.

Python 표준 라이브러리 14 데이터베이스(sqlite3)

데이터베이스 생성

먼저 데이터베이스를 생성하고, 데이터베이스에 테이블을 생성하겠습니다. connect()를 사용하여 데이터베이스에 연결한 후 포인터 커서를 위치시켜 SQL 명령을 실행할 수 있습니다.

# By Vamei
import sqlite3

# test.db is a file in the working directory.
conn = sqlite3.connect("test.db")

c = conn.cursor()

# create tables
c.execute('''CREATE TABLE category
      (id int primary key, sort int, name text)''')
c.execute('''CREATE TABLE book
      (id int primary key, 
       sort int, 
       name text, 
       price real, 
       category int,
       FOREIGN KEY (category) REFERENCES category(id))''')

# save the changes
conn.commit()

# close the connection with the database
conn.close()
로그인 후 복사

SQLite의 데이터베이스는 위의 test.db와 같이 디스크에 있는 파일이므로 전체 데이터베이스를 쉽게 이동하거나 복사할 수 있습니다. test.db는 처음부터 존재하지 않으므로 SQLite는 자동으로 새 파일을 생성합니다.

execute() 명령을 사용하여 두 개의 SQL 명령을 실행하여 데이터베이스에 두 개의 테이블을 생성했습니다. 생성 후 데이터베이스를 저장하고 연결을 끊습니다.

데이터 삽입

위에서 데이터베이스와 테이블이 생성되고, 데이터베이스의 추상적인 구조가 구축된다. 다음은 동일한 데이터베이스에 데이터를 삽입합니다.

# By Vamei

import sqlite3

conn = sqlite3.connect("test.db")
c    = conn.cursor()

books = [(1, 1, 'Cook Recipe', 3.12, 1),
            (2, 3, 'Python Intro', 17.5, 2),
            (3, 2, 'OS Intro', 13.6, 2),
           ]

# execute "INSERT" 
c.execute("INSERT INTO category VALUES (1, 1, 'kitchen')")

# using the placeholder
c.execute("INSERT INTO category VALUES (?, ?, ?)", [(2, 2, 'computer')])

# execute multiple commands
c.executemany('INSERT INTO book VALUES (?, ?, ?, ?, ?)', books)

conn.commit()
conn.close()
로그인 후 복사

데이터를 삽입할 때 Execute()를 사용하여 전체 SQL 문을 실행할 수도 있습니다. SQL 문의 매개변수는 대체 기호로 "?"를 사용하고, 후속 매개변수에는 특정 값을 부여한다. "%s"와 같은 Python 형식 문자열은 SQL 주입 공격에 취약하므로 여기서는 사용할 수 없습니다.

executemany() 메서드를 사용하여 여러 삽입을 수행하고 여러 레코드를 추가할 수도 있습니다. 각 레코드는 위 books 테이블의 요소와 같이 테이블의 요소입니다.

쿼리

쿼리 문을 실행한 후 Python은 쿼리에서 얻은 여러 레코드가 포함된 루퍼를 반환합니다. 루프에서 읽거나 sqlite3에서 제공하는 fetchone() 및 fetchall() 메서드를 사용하여 레코드를 읽을 수 있습니다.

# By Vamei

import sqlite3

conn = sqlite3.connect('test.db')
c = conn.cursor()

# retrieve one record
c.execute('SELECT name FROM category ORDER BY sort')
print(c.fetchone())
print(c.fetchone())

# retrieve all records as a list
c.execute('SELECT * FROM book WHERE book.category=1')
print(c.fetchall())

# iterate through the records
for row in c.execute('SELECT name, price FROM book ORDER BY sort'):
    print(row)
로그인 후 복사

업데이트 및 삭제

레코드를 업데이트하거나 삭제할 수 있습니다. Record:

# By Vamei

conn = sqlite3.connect("test.db")
c = conn.cursor()

c.execute('UPDATE book SET price=? WHERE id=?',(1000, 1))
c.execute('DELETE FROM book WHERE id=2')

conn.commit()
conn.close()
로그인 후 복사

전체 테이블을 직접 삭제할 수도 있습니다:

c.execute('DROP TABLE book')

test를 삭제하는 경우. db 이면 전체 데이터베이스가 삭제됩니다.

요약

sqlite3은 SQLite에 대한 인터페이스일 뿐입니다. SQLite 데이터베이스를 능숙하게 사용하려면 관계형 데이터베이스에 대한 더 많은 지식을 배워야 합니다.


관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿