간단한 소개
SQLite 데이터베이스는 매우 작은 임베디드 오픈 소스 데이터베이스 소프트웨어로, 독립적인 유지 관리 프로세스가 없으며 모든 유지 관리가 프로그램 자체에서 이루어집니다. ACID를 준수하는 관계형 데이터베이스 관리 시스템으로, 임베디드 장치에서 매우 낮은 리소스를 차지하도록 설계되었습니다. 충분한. Windows/Linux/Unix와 같은 주류 운영 체제를 지원할 수 있으며 Tcl, C#, PHP, Java 등과 같은 많은 프로그래밍 언어 및 ODBC 인터페이스와 결합할 수 있습니다. 또한 두 가지 개방형 인터페이스와 비교됩니다. MySQL 및 PostgreSQL의 소스 세계에서는 유명한 데이터베이스 관리 시스템 중 처리 속도가 가장 빠릅니다. SQLite의 첫 번째 알파 버전은 2000년 5월에 탄생했습니다. 이제 10년이 지났으며 SQLite도 SQLite 3 버전이 출시되었습니다.
설치 및 사용
1. Python2 이후에 Python SQLITE 데이터베이스 모듈을 가져옵니다
. 5, 내장 SQLite3이 내장 모듈이 되어서 설치 수고를 덜고, import만 하면 됩니다~
import sqlite3
2. Create/ 데이터베이스 열기
연결 함수 호출 시 라이브러리 이름을 지정합니다. 지정한 데이터베이스가 있으면 데이터베이스를 직접 엽니다. 없으면 새로 만들고 엽니다.
cx = sqlite3.connect("E:/test.db")
메모리에 데이터베이스를 생성할 수도 있습니다.
con = sqlite3.connect(":memory:")
3. 데이터베이스 연결 개체
데이터베이스를 열 때 반환되는 개체 cx는 다음 작업을 수행할 수 있는 데이터베이스 연결 객체:
commit()--트랜잭션 제출
rollback()--트랜잭션 롤백
close()--Close 데이터베이스 연결
cursor()--커서 생성
commit()과 관련하여 Isolation_level 격리 수준이 기본값인 경우 데이터베이스의 모든 작업에 이 명령을 사용해야 합니다. isolation_level=None을 설정하여 자동 커밋 모드로 변경할 수도 있습니다.
4. 커서를 사용하여 데이터베이스 쿼리
데이터베이스를 쿼리하고 쿼리 개체를 얻으려면 커서 개체 SQL 문을 사용해야 합니다. 다음과 같은 방법으로 커서를 정의합니다.
cu=cx.cursor()
커서 개체에는 다음 작업이 있습니다.
execute()--SQL 문 실행
executemany--여러 SQL 문 실행
close()-커서 닫기
fetchone()-결과에서 레코드를 가져와 커서를 다음 레코드로 가리킵니다.
fetchmany()--결과에서 여러 레코드 가져오기
fetchall()-결과에서 모든 레코드 가져오기
scroll()--커서 스크롤
1. 테이블 생성
cu.execute("테이블 카탈로그 생성(id 정수 기본 키, pid 정수, 이름 varchar(10) UNIQUE, 별칭 텍스트 NULL)")
위 명령문은 기본 키 id, pid, 이름을 갖는 Catalog라는 테이블을 생성합니다. 이름은 중복될 수 없으며 기본 별명은 NULL입니다.
2. 데이터 삽입
다음과 같은 쓰기는 피하세요.
# 이렇게 하지 마세요. 안전하지 않으면 주입 공격 pid=200c로 이어집니다. 실행("... where pid = '%s'" % pid)
올바른 접근 방식은 다음과 같습니다. t가 단일 값인 경우에도 t=(n 형식이어야 합니다. ,), 튜플은 변경되지 않기 때문입니다.
for t in[(0,10,'abc','Yu'),(1,20,'cba','Xu')]: cx.execute("카탈로그 값에 삽입 (? ,?,?,?)", t)
단순히 두 행의 데이터를 삽입하면 되지만 제출된 후에만 적용된다는 점을 기억해야 합니다. 데이터베이스 연결 개체 cx를 사용하여 롤백 작업을 제출하고 반환합니다.
cx.commit()
3. Query
cu.execute("select * 카탈로그에서")
쿼리된 데이터를 추출하려면 다음과 같이 커서의 가져오기 기능을 사용합니다.
In [10]: cu.fetchall() Out[10]: [ (0, 10 , u'abc', u'Yu'), (1, 20, u'cba', u'Xu')]
cu.fetchone()을 사용하면 첫 번째 목록의 항목이 다시 사용되면 두 번째 항목으로 돌아가서 순서대로 진행됩니다.
4.
에서 수정합니다. cu.execute("업데이트 카탈로그 세트 이름 ='Boy' where id = 0") In [13]: cx.commit()
참고, 데이터를 수정한 후 제출
5. 삭제
cu.execute("id = 1인 카탈로그에서 삭제") cx.commit()
6. >
먼저 IDE를 확인하세요. 아니면 시스템 기본 인코딩이 utf-8이고 중국어 앞에 u를 추가하세요.
x=u'鱼' cu.execute("카탈로그 세트 이름 업데이트=? 여기서 id = 0",x) cu.execute("카탈로그에서 * 선택") cu.fetchall() [(0, 10, u'u9c7c', u'Yu'), (1, 20, u'cba', u'Xu')]
중국어 글꼴을 표시하려면 각 문자열을 순서대로 인쇄해야 합니다.
In [26]: for item in cu.fetchall(): ....: for element in item: ....: 인쇄 요소, ....: 인쇄 . ...: 0 10 fish Yu 1 20 cba Xu 메모리 오버헤드가 거의 없는 열에 대한 인덱스 및 이름 기반 대소문자 구분 액세스. 원본 텍스트는 다음과 같습니다.
sqlite3.Row는 메모리 오버헤드가 거의 없이 열에 대한 인덱스 기반 및 대소문자를 구분하지 않는 이름 기반 액세스를 모두 제공합니다. 자체 사용자 정의 사전 기반 접근 방식 또는 심지어 db_row 기반 솔루션.
Row 객체에 대한 자세한 소개
class sqlite3.Row
Row 인스턴스가 제공됩니다. Connection 개체에 대해 고도로 최적화된 row_factory입니다. 대부분의 기능에서 튜플을 모방하려고 합니다.
열 이름과 인덱스, 반복, 표현, 동일성 테스트 및 len()을 통한 매핑 액세스를 지원합니다.
두 개의 Row 개체에 정확히 동일한 열이 있고 해당 멤버가 동일한 경우 동일한지 비교합니다.
버전 2.6의 변경 사항: 반복 및 같음(해시 가능성)이 추가되었습니다.
keys( )
이 메소드는 쿼리 직후에 Cursor.description에 있는 각 튜플의 첫 번째 멤버를 반환합니다.
버전 2.6의 새로운 기능