SQLite는 오픈 소스 데이터베이스이며 구성이 필요 없는 서버리스입니다. 전체 데이터베이스는 운영 체제 파일 시스템의 아무 곳에나 배치할 수 있는 단일 디스크 파일입니다. SQLite 명령은 표준 SQL과 유사합니다. SQLite는 내부 데이터 저장을 위해 브라우저와 같은 응용 프로그램에서 광범위하게 사용됩니다. 또한 임베디드 장치를 위한 편리한 데이터 저장 장치입니다.
표준 Python 라이브러리에는 SQLite 데이터베이스 연결에 대한 기본 지원이 있습니다. Gerhad Haring이 작성한 DB-API V2 호환 모듈인 sqlite3 모듈이 포함되어 있습니다. DB-API 2.0을 준수합니다.
DB-API는 다른 데이터베이스 제품에 액세스하는 데 사용되는 Python 모듈 간의 유사성을 보장하기 위해 PEP-249에 따라 정의되었습니다.
데이터베이스 처리 프로세스의 첫 번째 단계는 데이터베이스를 나타내는 연결 개체를 얻는 것입니다. 다음으로 연결을 사용하여 커서 개체를 얻습니다. 커서 객체는 반복자의 개념과 유사합니다. 데이터베이스 쿼리에서 반환된 개별 행을 처리하는 데 사용됩니다. 커서는 행 집합의 한 행에 대한 포인터로 볼 수 있습니다.
커서 개체는 기본 데이터베이스에서 CRUD 작업을 수행하기 위한 SQL 쿼리를 실행하는 데 도움이 됩니다.
연결() 함수
sqlite3 모듈의 이 함수는 디스크에 있는 기존 데이터베이스를 나타내는 연결 개체를 반환하거나, 이미 존재하지 않는 경우 새 데이터베이스를 엽니다.
sqlite3conn=sqlite3.connect('mydb.sqlite3') 가져오기
SQLite는 메모리 내 데이터베이스 생성을 지원합니다. 이를 위해 특수 이름 ':memory:'를 사용하십시오.
conn=sqlite3.connect(':메모리:')
다음 메소드는 Connection 클래스에 정의되어 있습니다.
커서() 이 메서드는 커서 개체를 반환합니다.
cur=conn.cursor()
커밋() − 이 방법은 트랜잭션을 디스크에 지속적으로 커밋합니다.
롤백() − 이 메소드는 데이터베이스 상태를 commit()에 대한 마지막 호출로 복원하기 위해 트랜잭션을 롤백합니다. 이 방법은 SQL 트랜잭션에서 예외가 발생하는 경우 데이터 일관성을 보장합니다.
try:conn.commit()except:conn.rollback()
실행() − 암시적으로 커서를 생성하고 해당 execute() 메서드를 호출합니다.
실행() − 이 메서드는 암시적으로 커서를 생성하고 해당 executemany() 메서드를 호출합니다.
create_function() − 이 메서드는 나중에 SQL 문 내에서 사용할 수 있는 사용자 정의 함수를 생성합니다.
create_aggregate() − 이 메소드는 집계 함수를 생성합니다.
iterdump() − 이 방법은 SQL 텍스트 형식의 데이터베이스 덤프를 생성합니다.
import sqlite3con =sqlite3.connect('mydb.sqlite3')f =dump.sql', 'w')for line in con.iterdump():f.write('%s\n' % line)사전>백업() − 이 방법은 SQLite 데이터베이스에 액세스하는 동안에도 백업을 생성합니다.
소스 =sqlite3.connect('mydb.sqlite3')dest =sqlite3.connect(':memory:')source.backup(대상)커서 개체
연결 객체에서 얻은 커서는 execute() 메서드를 사용하여 데이터베이스에 대한 다양한 SQL 작업을 수행하는 데 도움이 됩니다. 예를 들어 다음 명령문은 현재 데이터베이스에 테이블을 생성합니다.
cur =conn.cursor()cur.execute("CREATE TABLE guests(ID INTEGER PRIMARY KEY, 이름 TEXT(20) NOT NULL, 주소 TEXT(40), 도시 TEXT(20));"다음은 테이블에 레코드를 삽입합니다.
cur.execute('''INSERT INTO GUESTS VALUES(1,'RAJU','ABIDS', 'HYDERABAD');''')대량 추가 작업을 수행하려면 executemany() 메서드를 사용하십시오.
addresses=[(2,'KISHAN', 'TILAK ROAD', 'PUNE'), (3, 'LATA', 'GAANDHI NAGAR', 'AURANGABAD')]sql='INSERT INTO GUESTS VALUES(:ID , :NAME, :ADD, :CITY)'cur.executemany(sql, 주소)SELECT 쿼리는 쿼리에 대한 응답으로 반환된 모든 레코드를 포함하는 결과 집합을 형성합니다. execute() 메서드는 SELECT 쿼리 문을 나타내는 문자열을 사용합니다. DB-API에는 결과 집합을 나타내는 커서의 행을 검색하는 두 가지 방법이 있습니다.
페원() − 가져온 레코드의 각 열 값으로 구성된 튜플 형식으로 결과 집합에서 다음 사용 가능한 레코드를 가져옵니다.
fetchall() − 튜플 목록의 형태로 남아 있는 모든 레코드를 가져옵니다. 각 튜플은 하나의 행에 해당하며 테이블의 각 열 값을 포함합니다.
다음 코드는 fetchone() 메서드를 사용하여 게스트 테이블의 모든 레코드를 나열합니다.
sql ="게스트에서 * 선택;"cur =db.cursor()cur.execute(sql)while True:record=cur.fetchone()if record==None:breakprint(레코드)fetchall() 메서드의 사용은 다음 명령문에 의해 설명됩니다.
sql ="게스트에서 * SELECT;"cur =db.cursor()cur.execute(sql)set =cur.fetchall()의 레코드에 대한 set:print(레코드)SQLite 및 Python 유형
SQLite 데이터 유형은 기본적으로 다음 표에 따라 동등한 Python 데이터 유형에 매핑됩니다.
SQLite 유형 | |
---|---|
없음 | NULL |
int | 정수 |
플로트 | 실제 |
문자열 | 텍스트 |
바이트 | BLOB |
예외
DB-API는 SQLite 데이터베이스를 사용한 SQL 작업과 관련하여 다음 예외를 정의합니다. -
데이터베이스 오류 | 데이터베이스와 관련된 오류에 대해 예외가 발생했습니다. |
무결성 오류 | 데이터베이스의 관계형 무결성이 영향을 받으면 예외가 발생합니다. 외래 키 검사가 실패합니다. DatabaseError의 하위 클래스입니다. |
프로그래밍 오류 | 프로그래밍 오류(예:테이블을 찾을 수 없거나 이미 존재하는 테이블, SQL 문의 구문 오류, 잘못된 매개변수 개수 등)에 대해 발생한 예외 |
작업 오류 | 데이터베이스 작업과 관련되어 있고 반드시 프로그래머가 제어할 필요는 없는 오류에 대해 발생하는 예외, |
지원되지 않는 오류 | 데이터베이스에서 지원하지 않는 메소드나 데이터베이스 API를 사용한 경우 예외가 발생했습니다. |