기술나눔

sqlite3 — SQLite 데이터베이스용 DB-API 2.0 인터페이스

2024-07-12

한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina

sqlite3 — SQLite 데이터베이스용 DB-API 2.0 인터페이스 — Python 3.12.4 설명서

sqlite3— SQLite 데이터베이스용 DB-API 2.0 인터페이스
sqlite3 — SQLite 데이터베이스용 DB-API 2.0 인터페이스

소스 코드: 라이브러리/sqlite3/    소스 코드 위치:Lib/sqlite3/

SQLite는 별도의 서버 프로세스가 필요 없는 가벼운 디스크 기반 데이터베이스를 제공하는 C 라이브러리이며 SQL 쿼리 언어의 비표준 변형을 사용하여 데이터베이스에 액세스할 수 있습니다. 일부 애플리케이션은 SQLite를 내부 데이터 저장소에 사용할 수 있습니다. SQLite를 사용하여 애플리케이션을 프로토타입화한 다음 PostgreSQL 또는 Oracle과 같은 더 큰 데이터베이스로 코드를 이식할 수도 있습니다.
SQLite는 별도의 서버 프로세스가 필요하지 않은 경량 디스크 기반 데이터베이스를 제공하고 SQL 쿼리 언어의 비표준 변형을 사용하여 데이터베이스에 액세스할 수 있도록 하는 C 언어 라이브러리입니다. 일부 응용 프로그램은 내부 데이터 저장을 위해 SQLite를 사용할 수 있습니다. 또한 SQLite를 사용하여 애플리케이션의 프로토타입을 만든 다음 해당 코드를 PostgreSQL 또는 Oracle과 같은 대규모 데이터베이스로 마이그레이션할 수 있습니다.

그만큼sqlite3모듈은 Gerhard Häring이 작성했습니다. DB-API 2.0 사양을 준수하는 SQL 인터페이스를 제공합니다.PEP 249, SQLite 3.7.15 이상이 필요합니다.
sqlite3 모듈 게르하르트 해링(Gerhard Häring)이 각본을 맡은 작품입니다. PEP 249에 설명된 DB-API 2.0 사양을 준수하는 SQL 인터페이스를 제공하며 SQLite 버전 3.7.15 이상이 필요합니다.

이 문서에는 4개의 주요 섹션이 포함되어 있습니다. 이 문서에는 주로 다음 4개의 주요 섹션이 포함되어 있습니다.

  • 지도 시간사용 방법을 가르칩니다sqlite3기준 치수.지도 시간부분에서는 sqlite3 모듈을 사용하는 방법을 가르칩니다.

  • 참조이 모듈이 정의하는 클래스와 함수를 설명합니다.
    인용하다섹션에서는 이 모듈에 의해 정의된 클래스와 함수를 설명합니다.

  • 사용 방법 가이드특정 작업을 처리하는 방법을 자세히 설명합니다.
    운영안내섹션에서는 특정 작업을 처리하는 방법을 자세히 설명합니다.

  • 설명거래 제어에 대한 심층적인 배경 정보를 제공합니다.
    설명하다이 섹션에서는 트랜잭션 제어에 대한 배경 지식을 심층적으로 소개합니다.

또한보십시오

https://www.sqlite.org

SQLite 웹 페이지. 이 설명서에서는 지원되는 SQL 언어에 대한 구문과 사용 가능한 데이터 유형을 설명합니다.
SQLite의 웹 페이지에는 지원되는 SQL 방언의 구문과 사용 가능한 데이터 유형이 설명되어 있습니다.

SQL 튜토리얼SQL 튜토리얼

SQL 구문을 배우기 위한 튜토리얼, 참고 자료 및 예제입니다.
SQL 구문 학습을 위한 자습서, 참조 및 예제입니다.

PEP 249- 데이터베이스 API 사양 2.0 PEP 249 - 데이터베이스 API 사양 2.0

Marc-André Lemburg가 작성한 PEP. Marc-André Lemburg가 작성한 PEP.

지도 시간지도 시간

이 튜토리얼에서는 데이터베이스를 생성합니다. 몬티 파이튼 영화 기본 사용sqlite3기능성. 여기에는 데이터베이스 개념에 대한 기본적인 이해가 포함됩니다.커서그리고업무.
이 튜토리얼에서는 기본 sqlite3 기능을 사용하여 Monty Python 영화에 대한 데이터베이스를 생성합니다. 이 자습서에서는 사용자가 커서 및 트랜잭션을 포함한 데이터베이스 개념에 대한 기본 지식이 있다고 가정합니다.

먼저 새 데이터베이스를 생성하고 데이터베이스 연결을 열어야 합니다.sqlite3그것으로 작업합니다. 전화하세요sqlite3.연결()데이터베이스에 연결을 생성하려면tutorial.db현재 작업 디렉토리에서 존재하지 않으면 암묵적으로 생성함:
먼저, sqlite3이 상호 작용할 수 있도록 새 데이터베이스를 만들고 데이터베이스 연결을 열어야 합니다. sqlite3.connect()를 호출하여 현재 작업 디렉터리에 있는 tutorial.db 데이터베이스에 대한 연결을 생성하고, 데이터베이스가 존재하지 않는 경우 암시적이고 부드럽게 자동으로 연결을 생성합니다.

  1. import sqlite3
  2. con = sqlite3.connect("tutorial.db")

반환된연결물체con디스크상의 데이터베이스에 대한 연결을 나타냅니다.
반환된 Connection 개체(이 경우 con이라고 함)는 디스크의 데이터베이스에 대한 연결을 나타냅니다.

하기 위해 SQL 문을 실행하다 그리고SQL 쿼리에서 결과 가져오기, 데이터베이스 커서를 사용해야 합니다. 부르다con.커서()생성하려면커서:
SQL 문을 실행하고 SQL 쿼리에서 결과를 얻으려면 데이터베이스 커서를 사용해야 합니다. 커서를 생성하려면 con.cursor()를 호출하세요.

cur = con.cursor()

이제 데이터베이스 연결과 커서가 있으므로 데이터베이스 테이블을 만들 수 있습니다.movie제목, 출시 연도 및 리뷰 점수에 대한 열이 있습니다. 단순화를 위해 테이블 ​​선언에서 열 이름만 사용할 수 있습니다.유연한 타이핑SQLite의 기능인 데이터 유형을 지정하는 것은 선택 사항입니다. 실행CREATE TABLE호출하여 진술cur.execute(...):
이제 데이터베이스 연결과 커서가 있으므로 제목, 출시 연도 및 리뷰 점수와 같은 열이 있는 movie라는 데이터베이스 테이블을 만들 수 있습니다. 작업을 단순화하기 위해 테이블 ​​선언에서 직접 열 이름을 사용할 수 있습니다. SQLite의 유연한 입력 기능으로 인해 데이터 유형을 지정하는 것은 선택 사항입니다. cur.execute(...)를 호출하여 CREATE TABLE 문을 실행합니다.

cur.execute("CREATE TABLE movie(title, year, score)")

새 테이블이 생성되었는지 확인하려면 다음을 쿼리하세요.sqlite_masterSQLite에 내장된 테이블에는 이제 다음 항목이 포함되어야 합니다.movie테이블 정의(참조스키마 테이블자세한 내용은). 해당 쿼리를 호출하여 실행합니다.cur.execute(...), 결과를 다음에 할당합니다.res, 그리고 전화하다res.fetchone()결과 행을 가져오려면:
이제 영화 테이블 정의에 대한 항목을 포함해야 하는 SQLite의 내장 sqlite_master 테이블을 쿼리하여 새 테이블이 생성되었는지 확인할 수 있습니다(자세한 내용은 스키마 테이블 참조). cur.execute(...)를 호출하여 쿼리를 실행하고, 결과를 res에 할당하고, res.fetchone()을 호출하여 결과 행을 가져옵니다.

>>>

  1. >>> res = cur.execute("SELECT name FROM sqlite_master")
  2. >>> res.fetchone()
  3. ('movie',)

쿼리가 다음을 반환하므로 테이블이 생성되었음을 알 수 있습니다.튜플테이블 이름을 포함합니다. 쿼리를 실행하면sqlite_master존재하지 않는 테이블에 대해spamres.fetchone()돌아올 것이다None:
쿼리가 테이블 이름이 포함된 튜플을 반환했기 때문에 테이블이 성공적으로 생성되었음을 확인할 수 있습니다. 존재하지 않는 테이블(예: 스팸)에 대해 sqlite_master를 쿼리하면 res.fetchone()은 None을 반환합니다.

>>>

  1. >>> res = cur.execute("SELECT name FROM sqlite_master WHERE name='spam'")
  2. >>> res.fetchone() is None
  3. True

이제 SQL 리터럴로 제공된 두 행의 데이터를 실행하여 추가합니다.INSERT다시 한번 호출하여 진술cur.execute(...):
이제 INSERT 문을 실행하여(cur.execute(...)를 다시 호출) SQL 리터럴로 제공되는 두 개의 데이터 행을 추가합니다.

  1. cur.execute("""
  2. INSERT INTO movie VALUES
  3. ('Monty Python and the Holy Grail', 1975, 8.2),
  4. ('And Now for Something Completely Different', 1971, 7.5)
  5. """)

그만큼INSERT명령문은 데이터베이스에 변경 사항이 저장되기 전에 커밋되어야 하는 트랜잭션을 암묵적으로 엽니다(참조).거래 제어(자세한 내용은). 부르다con.commit()트랜잭션을 커밋하기 위한 연결 객체에 대해:
INSERT 문은 변경 사항이 데이터베이스에 저장되기 전에 커밋되어야 하는 트랜잭션을 암시적으로 자동으로 시작합니다(자세한 내용은 트랜잭션 제어 참조). 트랜잭션을 커밋하려면 연결 개체에서 con.commit()을 호출하세요.

con.commit()

데이터가 올바르게 삽입되었는지 확인하려면 다음을 실행하세요.SELECT쿼리. 이제 익숙한 것을 사용하세요cur.execute(...)결과를 할당하다res, 그리고 전화하다res.fetchall()모든 결과 행을 반환하려면:
SELECT 쿼리를 실행하여 데이터가 올바르게 삽입되었는지 확인할 수 있습니다. 이제 익숙한 cur.execute(...)를 사용하여 결과를 res에 할당하고 res.fetchall()을 호출하여 모든 결과 행을 반환합니다.

>>>

  1. >>> res = cur.execute("SELECT score FROM movie")
  2. >>> res.fetchall()
  3. [(8.2,), (7.5,)]

결과는목록두 개 중tuples, 행당 하나씩, 각 행에는 해당 행이 포함됩니다.score값.
결과는 각 행에 하나씩 두 개의 튜플과 해당 행의 점수 값을 포함하는 각 튜플의 목록입니다.

이제 다음을 호출하여 세 개의 행을 더 삽입합니다.cur.executemany(...):
이제 cur.executemany(...)를 호출하여 세 개의 데이터 행을 더 삽입합니다.

  1. data = [
  2. ("Monty Python Live at the Hollywood Bowl", 1982, 7.9),
  3. ("Monty Python's The Meaning of Life", 1983, 7.5),
  4. ("Monty Python's Life of Brian", 1979, 8.0),
  5. ]
  6. cur.executemany("INSERT INTO movie VALUES(?, ?, ?)", data)
  7. con.commit() # Remember to commit the transaction after executing INSERT.

그것을주의해라?플레이스홀더는 바인딩하는 데 사용됩니다.data쿼리에. 항상 대신 자리 표시자를 사용하세요.문자열 포맷팅Python 값을 SQL 문에 바인딩하여 다음을 방지합니다.SQL 주입 공격(보다SQL 쿼리에서 플레이스홀더를 사용하여 값을 바인딩하는 방법상세 사항은).
? 자리 표시자는 데이터를 쿼리에 바인딩하는 데 사용됩니다. SQL 삽입 공격을 피하기 위해 Python 값을 SQL 문에 바인딩하려면 항상 문자열 서식 대신 자리 표시자를 사용하세요(자세한 내용은 "SQL 쿼리에서 자리 표시자를 사용하여 값을 바인딩하는 방법" 참조).

새 행이 삽입되었는지 확인하려면 다음을 실행하세요.SELECT이번에는 쿼리 결과를 반복합니다.
SELECT 쿼리를 실행하여 새 행이 삽입되었는지 확인할 수 있습니다. 이번에는 쿼리 결과를 반복하겠습니다.

>>>

  1. >>> for row in cur.execute("SELECT year, title FROM movie ORDER BY year"):
  2. ... print(row)
  3. (1971, 'And Now for Something Completely Different')
  4. (1975, 'Monty Python and the Holy Grail')
  5. (1979, "Monty Python's Life of Brian")
  6. (1982, 'Monty Python Live at the Hollywood Bowl')
  7. (1983, "Monty Python's The Meaning of Life")

각 행은 두 항목입니다튜플~의(year, title)쿼리에서 선택한 열과 일치합니다.
각 행은 쿼리에서 선택한 열과 일치하는 두 개의 요소(연도, 제목)를 포함하는 튜플입니다.

마지막으로 다음을 호출하여 데이터베이스가 디스크에 기록되었는지 확인합니다.con.close()기존 연결을 닫고, 새 연결을 열고, 새 커서를 만든 다음 데이터베이스를 쿼리합니다.
마지막으로 전화로con.close() 기존 데이터베이스 연결을 닫고 데이터베이스가 디스크에 기록되었는지 확인합니다. 그런 다음 새 연결을 열고 새 커서를 만든 다음 데이터베이스를 쿼리하여 데이터가 성공적으로 기록되었는지 확인합니다.

>>>

  1. >>> con.close()
  2. >>> new_con = sqlite3.connect("tutorial.db")
  3. >>> new_cur = new_con.cursor()
  4. >>> res = new_cur.execute("SELECT title, year FROM movie ORDER BY score DESC")
  5. >>> title, year = res.fetchone()
  6. >>> print(f'The highest scoring Monty Python movie is {title!r}, released in {year}')
  7. The highest scoring Monty Python movie is 'Monty Python and the Holy Grail', released in 1975
  8. >>> new_con.close()

이제 다음을 사용하여 SQLite 데이터베이스를 만들었습니다.sqlite3모듈에서 데이터를 삽입하고 다양한 방법으로 값을 검색합니다.
당신은 지금 사용했습니다sqlite3 모듈은 SQLite 데이터베이스를 생성하고 다양한 방법으로 [검색? 】가치.

또한보십시오또한보십시오

참조매개변수 설명

모듈 기능

sqlite3.connect(database, timeout=5.0, detect_types=0, isolation_level='DEFERRED', check_same_thread=True, factory=sqlite3.Connection, cached_statements=128, uri=False, *, autocommit=sqlite3.LEGACY_TRANSACTION_CONTROL)

SQLite 데이터베이스에 대한 연결 열기 이 함수는 SQLite 데이터베이스에 대한 연결을 여는 데 사용됩니다.

매개변수:
  • 데이터 베이스 (경로와 같은 객체) – 열릴 데이터베이스 파일의 경로입니다. 다음을 전달할 수 있습니다.":memory:"생성하다메모리에만 존재하는 SQLite 데이터베이스, 연결을 엽니다.database (path-like object) 
    데이터베이스(경로와 같은 객체) — 열려는 데이터베이스 파일의 경로입니다.합격할 수 있어요":memory:"메모리 내 SQLite 데이터베이스를 생성하고 이에 연결된 .database(경로 유사 객체)를 엽니다.

  • 타임아웃 (뜨다) – 연결이 요청을 발생시키기 전에 기다려야 하는 초 수운영 오류테이블이 잠긴 경우. 다른 연결이 테이블을 수정하기 위해 트랜잭션을 열면 해당 테이블은 트랜잭션이 커밋될 때까지 잠깁니다. 기본값 5 초.timeout (float) — 테이블이 잠겨 있으면 연결이 끊깁니다.OperationalError 몇 초 동안 기다려야 합니까? 다른 연결이 테이블을 수정하기 위해 트랜잭션을 열면 트랜잭션이 커밋될 때까지 테이블이 잠깁니다. 기본값은 5초입니다.

  • 감지_유형 (정수) – 제어 여부 및 방법 데이터 유형 ~ 아니다SQLite에서 기본적으로 지원됨등록된 변환기를 사용하여 Python 유형으로 변환되도록 조회됩니다.레지스터_컨버터(). 원하는 조합으로 설정하세요(사용|, 비트 단위 또는)PARSE_DECLTYPES그리고PARSE_COLNAMES이를 가능하게 합니다. 열 이름 우선한다선언된 유형 두 플래그가 모두 설정된 경우 생성된 필드에 대한 유형을 감지할 수 없습니다(예:max(data)), 심지어감지_유형매개변수가 설정되었습니다.대신 반환됩니다. 기본적으로 (0), 유형 감지가 비활성화되었습니다.
    detect_types (int)— SQLite가 기본적으로 지원하지 않는 데이터 유형을 사용하기 위해 찾을지 여부와 방법을 제어합니다.register_converter() 등록된 변환기는 이를 Python 유형으로 변환합니다.으로 설정하다PARSE_DECLTYPES그리고PARSE_COLNAMES(비트 단위 또는| ) 이 기능을 활성화합니다.두 플래그가 모두 설정되어 있으면목록 보다 우선시됩니다성명 유형.생성된 지역의 경우 이러한 유형을 감지할 수 없습니다(예:max(data)), 설정된 경우에도detect_types매개변수는 대신 반환됩니다.str 유형. 기본적으로(0) 유형 감지는 비활성화되어 있습니다.


여기에 삽입하세요
이 영어 문단에서 "are looking up to"의 주어는 누구입니까?
이 영어 단락에서 "찾는다"라는 주제는 "SQLite에서 기본적으로 지원하지 않는 데이터 유형(SQLite에서 기본적으로 지원하지 않는 데이터 유형)"입니다.이 문장은 다음을 사용하여 의미합니다.register_converter() SQLite에서 기본적으로 지원하지 않는 데이터 유형을 찾아서 Python 유형으로 변환하기 위해 등록된 변환기입니다. 따라서 주제는 찾아서 변환해야 하는 특정 데이터 유형입니다.

  • 격리 수준 ( | 없음) – 레거시 트랜잭션 처리 동작을 제어합니다. 참조연결.격리_수준그리고isolated_level 속성을 통한 트랜잭션 제어더 많은 정보를 위해. 가능합니다"DEFERRED"(기본),"EXCLUSIVE"또는"IMMEDIATE"; 또는None거래 개시를 암묵적으로 비활성화합니다. 효과가 없습니다.연결.자동 커밋로 설정되었습니다레거시_트랜잭션_제어(기본값).
    isolation_level(문자열 | 없음) – 레거시 트랜잭션 처리 동작을 제어합니다.자세한 내용은 다음을 참조하세요.Connection.isolation_level그리고 "통과isolation_level재산 통제 거래"가 될 수 있습니다."DEFERRED"(기본값),"EXCLUSIVE"또는"IMMEDIATE";또는 다음으로 설정None 암시적으로 트랜잭션 열기를 암시적으로 비활성화합니다.하지 않는 한Connection.autocommit로 설정LEGACY_TRANSACTION_CONTROL(기본값), 그렇지 않으면 이 설정이 적용되지 않습니다.

  • 동일 스레드 확인 () - 만약에True(기본),프로그래밍 오류데이터베이스 연결이 해당 연결을 만든 스레드가 아닌 다른 스레드에 의해 사용되는 경우 발생합니다.False, 연결은 여러 스레드에서 액세스할 수 있습니다. 쓰기 작업은 데이터 손상을 방지하기 위해 사용자가 직렬화해야 할 수 있습니다. 참조스레드 안전성자세한 내용은.
    check_same_thread(부울 값) – 다음으로 설정된 경우True(기본값) 데이터베이스 연결을 생성한 스레드가 아닌 다른 스레드에서 데이터베이스 연결을 사용할 때 발생합니다.ProgrammingError 이상.로 설정한 경우False , 여러 스레드가 연결에 액세스할 수 있지만 사용자는 데이터 손상을 방지하기 위해 쓰기 작업 자체를 직렬화해야 할 수도 있습니다.자세한 내용은 다음을 참조하세요.threadsafety지시.

  • 공장 (연결) – 사용자 정의 하위 클래스연결기본값이 아닌 경우 연결을 생성하려면연결수업.
    factory(연결) – 기본값을 사용하지 않는 경우Connection클래스, 사용자 정의 지정Connection 연결을 생성하는 서브클래스입니다. 이 매개변수를 사용하면 특정 요구사항이나 확장에 따라 데이터베이스 연결 동작을 사용자 정의할 수 있습니다.

  • 캐시된_문장 (정수) – 진술문의 수sqlite3이 연결에 대해 내부적으로 캐시하여 구문 분석 오버헤드를 피해야 합니다. 기본적으로 128개의 문장입니다.
    cached_statements(정의) – sqlite3 구문 분석 오버헤드를 피하기 위해 이 연결에 대해 내부적으로 캐시되어야 하는 명령문 수입니다. 기본적으로 128개의 명령문이 캐시됩니다. 이 매개변수를 사용하면 캐시 크기를 조정하여 성능이나 메모리 사용량을 최적화할 수 있습니다.

  • 우리 () – 설정된 경우True데이터 베이스파일 경로와 선택적 쿼리 문자열이 있는 URI로 해석됩니다. 스키마 부분~ 해야 하다BE"file:", 경로는 상대적이거나 절대적일 수 있습니다. 쿼리 문자열은 SQLite에 매개변수를 전달하여 다양한SQLite URI를 사용하는 방법.
    uri(부울) – 다음으로 설정된 경우True,하지만database 파일 경로와 선택적 쿼리 문자열을 사용하여 URI(Uniform Resource Identifier)로 해석됩니다. URI의 구성표 부분~ 해야 하다 "file:"인 경우 경로는 상대 경로이거나 절대 경로일 수 있습니다. 쿼리 문자열을 사용하면 매개변수를 SQLite에 전달할 수 있으므로 SQLite URI를 사용하여 다양한 방법으로 작업할 수 있습니다. 이를 통해 읽기 전용 모드 설정, 캐시 크기 지정 등과 같은 보다 복잡한 데이터베이스 연결 옵션을 사용할 수 있습니다.

  • 자동 커밋 () - 제어PEP 249거래 처리 동작. 참조연결.자동 커밋그리고autocommit 속성을 통한 트랜잭션 제어자세한 내용은.자동 커밋현재 기본값으로 설정됨레거시_트랜잭션_제어. 기본값은 다음으로 변경됩니다.False향후 Python 릴리스에서.
    autocommit(부울) – PEP 249에 따라 트랜잭션 처리 동작을 제어합니다.자세한 내용은 다음을 참조하세요.Connection.autocommit 및 "autocommit 속성을 통한 트랜잭션 제어". 현재,autocommit기본값은 다음과 같이 설정됩니다.LEGACY_TRANSACTION_CONTROL 이는 Python 데이터베이스 API 사양(PEP 249)의 레거시 트랜잭션 제어 동작을 따른다는 의미입니다.그러나 향후 Python 버전에서는 기본값이 다음으로 변경됩니다.False이는 트랜잭션이 기본적으로 자동으로 커밋되지 않으며 사용자가 트랜잭션의 시작과 끝을 명시적으로 제어해야 함을 의미합니다.

참고하시기 바랍니다,*매개변수는 함수 정의에서 위치 인수와 키워드 인수 사이의 구분 기호로 사용됩니다.autocommit그 이후의 모든 매개변수는 키워드 매개변수여야 합니다.

반환 유형:반환 유형: 

연결

제기하다감사 이벤트 sqlite3.connect인수와 함께database.
sqlite3.connect: 사용할 때database데이터베이스에 연결할 때 발생하는 매개변수입니다.

제기하다감사 이벤트 sqlite3.connect/handle인수와 함께connection_handle.
sqlite3.connect/handle: 연결 핸들(connection_handle)은 생성될 때 발생합니다.

버전 3.4에서 변경된 사항: 다음이 추가되었습니다.우리매개변수.
버전 3.4: 추가됨uriURI 형식을 사용하여 데이터베이스 파일을 지정할 수 있는 매개변수입니다.

버전 3.7에서 변경된 사항:데이터 베이스이제 또한 될 수 있습니다경로와 같은 객체, 단순한 문자열이 아닙니다.
버전 3.7에서는:database매개변수는 이제 단순한 문자열이 아닌 경로류 객체가 될 수 있습니다.

버전 3.10에서 변경된 사항: 다음이 추가되었습니다.sqlite3.connect/handle감사 이벤트.
버전 3.10: 추가됨sqlite3.connect/handle연결 핸들이 생성될 때 트리거되는 감사 이벤트입니다.

버전 3.12에서 변경된 사항: 다음이 추가되었습니다.자동 커밋매개변수.
버전 3.12: 추가됨autocommit트랜잭션의 자동 커밋 동작을 보다 세밀하게 제어할 수 있는 매개변수입니다.

sqlite3.complete_statement(성명)

반품True만약 문자열이라면성명하나 이상의 완전한 SQL 문이 포함된 것으로 보입니다. 닫히지 않은 문자열 리터럴이 없고 문이 세미콜론으로 종료되는지 확인하는 것 외에는 어떤 종류의 구문 검증이나 구문 분석도 수행되지 않습니다.
문자열이면statement하나 이상의 완전한 SQL 문이 포함된 것으로 나타난 다음 반환됩니다.True . 닫히지 않은 문자열 리터럴이 없고 명령문이 세미콜론으로 끝나는지 확인하는 것 외에는 구문 유효성 검사나 구문 분석이 수행되지 않습니다.

예를 들어:

>>>

  1. >>> sqlite3.complete_statement("SELECT foo FROM bar;")
  2. True
  3. >>> sqlite3.complete_statement("SELECT foo")
  4. False

이 기능은 명령줄 입력 중에 입력한 텍스트가 완전한 SQL 문을 형성하는지 또는 호출하기 전에 추가 입력이 필요한지 확인하는 데 유용할 수 있습니다.실행하다().
이 함수는 명령줄에 입력할 때, 입력된 텍스트가 완전한 SQL 문처럼 보이는지 확인하는 데 도움이 될 수 있습니다.execute()이전에 추가 입력이 필요한지 여부입니다.

보다runsource()~에라이브러리/sqlite3/__main__.py실제 사용을 위해서.
실제 적용에서는 다음을 참조할 수 있습니다.Lib/sqlite3/__main__.py가운데runsource()사용법을 이해하는 기능입니다.

sqlite3.콜백_추적기능을활성화합니다(깃발/)

콜백 추적을 활성화하거나 비활성화합니다. 기본적으로 사용자 정의 함수, 집계, 변환기, 권한 부여자 콜백 등에서는 추적을 받지 못합니다. 이를 디버깅하려면 이 함수를 호출할 수 있습니다.깃발로 설정True. 그 후, 콜백에서 추적 정보를 받게 됩니다.시스템.stderr. 사용False해당 기능을 다시 비활성화합니다.
콜백 추적을 활성화하거나 비활성화합니다. 기본적으로 사용자 정의 함수, 집계 함수, 변환기, 인증 콜백 등에서는 어떤 역추적도 얻을 수 없습니다.디버깅하려면 이 함수를 호출하고 바꿀 수 있습니다.flag로 설정True .그 후에는 다음을 수행할 수 있습니다.sys.stderr 콜백에서 추적 정보를 가져옵니다.사용False이 기능을 다시 비활성화하려면

메모

사용자 정의 함수 콜백의 오류는 발생 불가능한 예외로 기록됩니다. 다음을 사용하세요.올릴 수 없는 후크 핸들러실패한 콜백을 조사하기 위해.
사용자 정의 함수 콜백의 오류는 포착할 수 없는 예외로 기록됩니다. 실패한 콜백에 대해 검사를 수행하려면 호출할 수 없는 후크 핸들러를 사용하세요.

 

이는 SQLite의 사용자 정의 함수(예: 집계 함수, 스칼라 함수 등)의 콜백에서 오류가 발생할 때 이러한 오류는 일반적인 Python 예외처럼 발생하지 않으며 try-Exception 블록에 의해 포착될 수 있음을 의미합니다. 대신, SQLite 또는 Python의 sqlite3 모듈에 의해 캡처되어 어떤 방식으로든 기록되지만(일반적으로 로그 또는 표준 오류 출력에 기록됨) 프로그램 실행을 중단하지는 않습니다(오류가 매우 심각하지 않는 한).

이러한 포착할 수 없는 예외를 검사하고 디버깅하려면 "캐치할 수 없는 후크 핸들러"를 설정할 수 있습니다. 이 핸들러는 포착되지 않은 예외가 발생할 때 Python이 호출하여 예외 정보를 매개변수로 전달하는 함수입니다. 이런 방식으로 프로세서 함수에 코드를 작성하여 이러한 예외를 기록하거나 확인하여 문제를 진단하는 데 도움을 줄 수 있습니다.

구체적인 구현은 Python 버전과 sqlite3 모듈의 구현 세부 사항에 따라 달라질 수 있습니다. 따라서 캐치할 수 없는 후크 핸들러를 설정하고 사용하는 방법을 알아보려면 최신 Python 문서나 sqlite3 모듈의 문서를 참조하는 것이 좋습니다.

sqlite3.등록_어댑터(유형어댑터/)

등록하다어댑터 호출 가능파이썬 유형을 적응시키다유형SQLite 유형으로 변환합니다. 어댑터는 유형의 Python 객체로 호출됩니다.유형유일한 인수로 사용하고 값을 반환해야 합니다.SQLite가 기본적으로 이해하는 유형.
Python 변환을 위해 **어댑터** 호출 가능 객체를 등록합니다.type 유형은 SQLite가 기본적으로 이해할 수 있는 유형에 맞게 조정됩니다.이 어댑터 기능은type유형의 객체는 유일한 인수로 호출되며 SQLite가 기본적으로 지원하는 유형의 값을 반환해야 합니다.
 

"라는 점에 유의해야 합니다.typetype"은 약간 오해의 소지가 있을 수 있습니다. 왜냐하면 일반적으로 우리는 Python의 내장형을 참조하지 않기 때문입니다.type 객체(즉, 유형 자체)는 데이터베이스에 직접 저장됩니다. 보다 일반적으로 우리는 Python의 객체(사용자 정의 유형의 인스턴스일 수 있음)를 SQLite가 저장할 수 있는 형식으로 조정하려고 합니다.그러나 문장을 문자 그대로 받아들이면 처리해야 할 경우type객체 자체(실제로는 드물지만)를 SQLite가 저장할 수 있는 형식(예: 유형 이름을 나타내는 문자열)으로 변환하는 어댑터를 작성해야 합니다.

그러나 더 일반적인 사용 사례는 사용자 정의 Python 유형 또는 다음과 같은 내장 유형입니다.datetimedecimal.Decimal등) SQLite 데이터베이스에서 올바르게 저장하고 검색할 수 있도록 어댑터를 작성합니다.

예를 들어, 사용자 정의 Python 클래스가 있는 경우MyClass, 해당 인스턴스를 SQLite 데이터베이스에 저장하려는 경우 이 클래스의 인스턴스를 SQLite에서 저장할 수 있는 문자열(또는 다른 유형)로 변환하는 어댑터를 작성한 다음 이 문자열을 다시 변환하는 변환기를 작성할 수 있습니다. 에게MyClass사례.

하지만 이 질문에 대해 단지 Python을 다루고 싶다면type객체(즉, 유형의 메타데이터)인 경우 유형의 이름(문자열)을 반환하는 어댑터를 작성할 수 있지만 일반적으로 객체를 데이터베이스에 저장하는 일반적인 방법은 아닙니다.

sqlite3.register_converter(타입이름변환기/)

등록하다변환기 호출 가능SQLite 객체를 유형으로 변환하려면타입이름특정 유형의 Python 객체로 변환합니다. 변환기는 모든 유형의 SQLite 값에 대해 호출됩니다.타입이름; 그것은 통과되었습니다바이트객체이며 원하는 Python 유형의 객체를 반환해야 합니다. 매개변수를 참조하세요.감지_유형~의연결하다()유형 감지가 어떻게 작동하는지에 대한 정보입니다.
SQLite 유형을 변환하기 위한 **변환기** 호출 가능 객체를 등록합니다.typename 객체를 특정 유형의 Python 객체로 변환합니다.모든 유형에 해당typename이 변환기는 SQLite 값을 수신할 때 호출됩니다.bytes 객체를 인수로 사용하고 필요한 Python 유형의 객체를 반환해야 합니다.유형 감지 작동 방식은 다음을 참조하세요.connect()기능의detect_types매개변수.

메모:타입이름그리고 쿼리에 있는 유형 이름은 대소문자를 구분하지 않고 일치합니다.
알아채다typename쿼리의 유형 이름은 일치 시 대소문자를 구분하지 않습니다.

모듈 상수

sqlite3.레거시_거래_제어

세트자동 커밋이 상수를 사용하여 이전 스타일(Python 3.12 이전) 트랜잭션 제어 동작을 선택합니다. 참조isolated_level 속성을 통한 트랜잭션 제어자세한 내용은.
할 것이다autocommit 이전 스타일(Python 3.12 이전) 트랜잭션 제어 동작을 선택하려면 이 상수로 설정합니다.자세한 내용은 "패스"를 참조하세요.isolation_level속성은 트랜잭션을 제어합니다."

sqlite3.PARSE_COLNAMES

이 플래그 값을 다음에 전달합니다.감지_유형매개변수연결하다()쿼리 열 이름에서 구문 분석된 유형 이름을 변환기 사전 키로 사용하여 변환기 함수를 조회합니다. 유형 이름은 대괄호( )로 묶어야 합니다.[]).
이 플래그 값을 다음으로 전달하세요.connect()기능의detect_types 변환기 사전의 키로 열 이름의 확인된 형식 이름을 쿼리하여 변환기 함수를 찾는 매개변수입니다. 유형 이름은 대괄호([])로 묶어야 합니다.

SELECT p as "p [point]" FROM test;  ! will look up converter "point"

이 플래그는 다음과 결합될 수 있습니다.PARSE_DECLTYPES사용하여|(비트 또는) 연산자.
이 플래그를 사용할 수 있습니다|(비트 OR) 연산자 ANDPARSE_DECLTYPES와 함께.

sqlite3.PARSE_DECLTYPES

이 플래그 값을 다음에 전달합니다.감지_유형매개변수연결하다()각 열에 대해 선언된 유형을 사용하여 변환기 함수를 찾습니다. 유형은 데이터베이스 테이블이 생성될 때 선언됩니다.sqlite3선언된 유형의 첫 번째 단어를 변환기 사전 키로 사용하여 변환기 함수를 찾습니다. 예:
이 플래그 값을 다음으로 전달하세요.connect()기능의detect_types 데이터베이스의 각 열에 선언된 유형을 사용하여 변환기 함수를 찾기 위한 매개변수입니다. 이러한 유형은 데이터베이스 테이블을 생성할 때 선언됩니다.sqlite3 변환기 함수는 선언된 유형의 첫 번째 단어를 변환기 사전의 키로 사용하여 조회됩니다. 예를 들어:

  1. CREATE TABLE test(
  2. i integer primary key, ! will look up a converter named "integer"
  3. p point, ! will look up a converter named "point"
  4. n number(10) ! will look up a converter named "number"
  5. )

이 플래그는 다음과 결합될 수 있습니다.PARSE_COLNAMES사용하여|(비트 또는) 연산자.

sqlite3.SQLITE_OK
sqlite3.SQLITE_거부
sqlite3.SQLITE_무시

반환해야 하는 플래그권한 부여자 콜백 호출 가능에게 전달되었습니다연결.set_authorizer(), 다음을 나타냅니다.
패스Connection.set_authorizer()~의authorizer_callback호출 가능 함수가 다음을 나타내기 위해 반환해야 하는 플래그:

  • 접근이 허용됩니다 (SQLITE_OK), 액세스가 허용됩니다(SQLITE_OK

  • SQL 문은 오류로 인해 중단되어야 합니다.SQLITE_DENY)
    오류로 인해 SQL 문이 중단되어야 합니다(SQLITE_DENY

  • 해당 열은 다음과 같이 처리되어야 합니다.NULL값 (SQLITE_IGNORE)
    열은 NULL 값으로 처리되어야 합니다.SQLITE_IGNORE

sqlite3.api레벨

지원되는 DB-API 레벨을 나타내는 문자열 상수입니다. DB-API에서 필요합니다. 하드코딩됨"2.0".
이 두 문자열 상수는 다음과 같습니다.sqlite3모듈에 정의되어 있으며 Python 데이터베이스 API 사양(DB-API)을 따릅니다.

sqlite3.param스타일

매개변수 마커 포맷팅의 유형을 나타내는 문자열 상수입니다.sqlite3모듈. DB-API에 의해 요구됨. 하드코딩됨"qmark".
이 문자열 상수는 다음을 지정합니다.sqlite3 모듈에서 예상하는 매개변수 표시 형식의 유형입니다. 이는 DB-API(데이터베이스 응용 프로그래밍 인터페이스) 사양에 필요합니다.다음과 같이 하드코딩되어 있습니다."qmark"는 SQL 쿼리를 생성할 때 매개변수 표시자가 물음표(?)로 표시되어야 함을 의미합니다.

메모

그만큼namedDB-API 매개변수 스타일도 지원됩니다.

sqlite3.sqlite_버전

런타임 SQLite 라이브러리의 버전 번호.
문자열 형식으로 표현된 SQLite 런타임 라이브러리의 버전 번호입니다.

sqlite3.sqlite_버전_정보

런타임 SQLite 라이브러리의 버전 번호튜플~의정수.
정수 튜플로 표현되는 SQLite 런타임 라이브러리의 버전 번호입니다.

sqlite3.스레드 안전

DB-API 2.0에서 요구하는 정수 상수로 스레드 안전 수준을 나타냅니다.sqlite3모듈이 지원합니다. 이 속성은 기본을 기반으로 설정됩니다.스레딩 모드기본 SQLite 라이브러리는 다음과 같이 컴파일됩니다. SQLite 스레딩 모드는 다음과 같습니다.
DB-API 2.0에 필요한 정수 상수입니다.sqlite3 모듈에서 지원하는 스레드 안전 수준입니다. 이 속성은 기본 SQLite 라이브러리가 컴파일된 기본 스레딩 모드에 따라 설정됩니다. SQLite의 스레딩 모드에는 다음이 포함됩니다.

  1. 단일 스레드: 이 모드에서는 모든 뮤텍스가 비활성화되고 SQLite는 한 번에 여러 스레드에서 사용하는 것이 안전하지 않습니다.
    단일 스레드: 이 모드에서는 모든 뮤텍스가 비활성화되며 SQLite는 여러 스레드에서 동시에 사용하기에 안전하지 않습니다.

  2. 멀티스레드: 이 모드에서는 두 개 이상의 스레드에서 단일 데이터베이스 연결이 동시에 사용되지 않는 한 SQLite를 여러 스레드에서 안전하게 사용할 수 있습니다.
    멀티 스레드: 이 모드에서는 두 개 이상의 스레드가 단일 데이터베이스 연결을 동시에 사용하지 않는 한 SQLite를 여러 스레드에서 안전하게 사용할 수 있습니다.

  3. 연재됨: 직렬화 모드에서는 SQLite는 여러 스레드에서 아무런 제한 없이 안전하게 사용할 수 있습니다.
    직렬화됨: 직렬화 모드에서는 SQLite를 아무런 제한 없이 여러 스레드에서 안전하게 사용할 수 있습니다.

SQLite 스레딩 모드에서 DB-API 2.0 스레드 안전 수준으로의 매핑은 다음과 같습니다.
SQLite의 스레드 모드와 DB-API 2.0 스레드 안전 수준의 매핑은 다음과 같습니다.

SQLite 스레딩 모드

스레드 안전성

SQLITE_스레드 안전

DB-API 2.0 의미

단일 스레드

0

0

스레드는 모듈을 공유할 수 없습니다.

멀티스레드

1

2

스레드는 모듈을 공유할 수 있지만 연결은 공유할 수 없습니다.

연재된

3

1

스레드는 모듈, 연결 및 커서를 공유할 수 있습니다.

버전 3.11에서 변경됨: 설정스레드 안전성하드코딩 대신 동적으로1.

sqlite3.버전

이 모듈의 버전 번호는 다음과 같습니다.. 이것은 SQLite 라이브러리 버전이 아닙니다.
문자열로 표현된 이 모듈의 버전 번호입니다.이것아니요SQLite 라이브러리의 버전 번호입니다.

버전 3.12부터 사용되지 않으며 버전 3.14에서 제거됩니다. 이 상수는 버전 번호를 반영하는 데 사용됩니다.pysqlite패키지, 이전에는 업스트림 변경 사항을 적용하던 타사 라이브러리sqlite3오늘날에는 아무런 의미도 없고 실질적인 가치도 없습니다.
버전 3.12부터 더 이상 사용되지 않으며 버전 3.14에서 제거됩니다. 이 상수는 반영하는 데 사용되었습니다.pysqlite패키지의 버전 번호,pysqlite업스트림에 업로드된 타사 라이브러리입니다.sqlite3 변경 사항을 커밋합니다. 이제 그것은 실질적인 의미나 실용적인 가치가 없습니다.

sqlite3.버전_정보

이 모듈의 버전 번호는 다음과 같습니다.튜플~의정수. 이것은 SQLite 라이브러리 버전이 아닙니다.

버전 3.12부터 사용되지 않으며 버전 3.14에서 제거됩니다. 이 상수는 버전 번호를 반영하는 데 사용됩니다.pysqlite패키지, 이전에는 업스트림 변경 사항을 적용하던 타사 라이브러리sqlite3오늘날에는 아무런 의미도 없고 실질적인 가치도 없습니다.

sqlite3.SQLITE_DBCONFIG_방어
sqlite3.SQLITE_DBCONFIG_DQS_DDL
sqlite3.SQLITE_DBCONFIG_DQS_DML
sqlite3.SQLITE_DBCONFIG_활성화_FKEY
sqlite3.SQLITE_DBCONFIG_ENABLE_FTS3_토큰화기
sqlite3.SQLITE_DBCONFIG_로드_확장 가능
sqlite3.SQLITE_DBCONFIG_활성화_QPSG
sqlite3.SQLITE_DBCONFIG_활성화_트리거
sqlite3.SQLITE_DBCONFIG_ENABLE_VIEW
sqlite3.SQLITE_DBCONFIG_레거시_변경_테이블
sqlite3.SQLITE_DBCONFIG_레거시_파일_형식
sqlite3.SQLITE_DBCONFIG_CKPT_ON_CLOSE 없음
sqlite3.SQLITE_DBCONFIG_데이터베이스 재설정
sqlite3.SQLITE_DBCONFIG_트리거_EQP
sqlite3.SQLITE_DBCONFIG_신뢰할 수 있는 스키마
sqlite3.SQLITE_DBCONFIG_쓰기_스키마

이러한 상수는 다음에 사용됩니다.연결.setconfig()그리고getconfig()행동 양식.
다음 상수가 사용됩니다.Connection.setconfig()그리고getconfig()방법.

이러한 상수의 사용 가능 여부는 컴파일된 SQLite Python 버전에 따라 다릅니다.
이러한 상수의 가용성은 SQLite Python이 컴파일된 SQLite 버전에 따라 다릅니다.

버전 3.12에 추가되었습니다.

또한보십시오

데이터베이스 연결 구성 옵션

SQLite 문서: 데이터베이스 연결 구성 옵션

연결 객체

수업sqlite3.연결

각 개방형 SQLite 데이터베이스는 다음으로 표현됩니다.Connection를 사용하여 생성된 객체sqlite3.연결(). 그들의 주요 목적은 만드는 것입니다커서객체 및거래 제어.

또한보십시오

SQLite 데이터베이스 연결에는 다음과 같은 속성과 메서드가 있습니다.

커서(팩토리=커서)

생성 및 반환커서객체. 커서 메서드는 단일 선택적 매개변수를 허용합니다.공장. 제공된 경우 이는 다음과 같아야 합니다.호출 가능인스턴스를 반환커서또는 그 하위 클래스.
을 생성하고 반환합니다.Cursor물체.cursor메소드는 선택적 단일 매개변수를 허용합니다.factory .이 매개변수가 제공되는 경우 이는 다음을 반환하는 호출 가능한 객체여야 합니다.Cursor또는 해당 하위 클래스의 인스턴스입니다.

블로오픈(테이블/*읽기 전용=거짓이름='메인')

열기얼룩기존 BLOB에 대한 핸들입니다.

매개변수:

  • 테이블 () – blob이 위치한 테이블의 이름입니다.
    BLOB 데이터가 포함된 테이블의 이름입니다.

  •  () – blob이 위치한 열의 이름입니다.
    BLOB 데이터가 포함된 열 이름입니다.

  •  () – blob이 위치한 행의 이름입니다.
    BLOB 데이터가 포함된 행의 이름(더 정확하게는 행의 식별자)입니다.

  • 읽기 전용 () - 로 설정Trueblob을 쓰기 권한 없이 열어야 하는지 여부. 기본값은 다음과 같습니다.False.
    True로 설정되면 쓰기 권한 없이 BLOB를 열어야 함을 나타냅니다. 기본값은 읽기 및 쓰기를 허용하는 False입니다.

  • 이름 () – blob이 있는 데이터베이스의 이름입니다. 기본값은 다음과 같습니다."main".
    BLOB 데이터가 포함된 데이터베이스의 이름입니다. 기본값은 SQLite의 기본 데이터베이스 이름인 "main"입니다.

인상:

운영 오류– Blob을 열려고 할 때WITHOUT ROWID테이블.
없이 시도할 때ID 테이블에서 BLOB 데이터가 열릴 때 발생합니다.

반환 유형:

얼룩

메모

blob 크기는 다음을 사용하여 변경할 수 없습니다.얼룩클래스. SQL 함수를 사용하세요zeroblob고정된 크기의 덩어리를 생성합니다.

버전 3.11에 추가되었습니다.

저지르다()

보류 중인 모든 트랜잭션을 데이터베이스에 커밋합니다.자동 커밋~이다True, 또는 열려 있는 거래가 없는 경우 이 방법은 아무 작업도 수행하지 않습니다.autocommit~이다False, 보류 중인 트랜잭션이 이 방법으로 커밋된 경우 암묵적으로 새 트랜잭션이 열립니다.
보류 중인 트랜잭션을 데이터베이스에 커밋합니다.만약에autocommit True이거나 열려 있는 트랜잭션이 없으면 이 메서드는 어떤 작업도 수행하지 않습니다.만약에autocommitFalse이고 이 메서드가 보류 중인 트랜잭션을 커밋하면 새 트랜잭션이 암시적으로 시작됩니다.

롤백()

보류 중인 모든 거래의 시작으로 롤백합니다.자동 커밋~이다True, 또는 열려 있는 거래가 없는 경우 이 방법은 아무 작업도 수행하지 않습니다.autocommit~이다False, 보류 중인 트랜잭션이 이 방법으로 롤백된 경우 암묵적으로 새 트랜잭션이 열립니다.
보류 중인 트랜잭션의 시작 부분으로 롤백합니다.만약에autocommit True이거나 열려 있는 트랜잭션이 없으면 이 메서드는 어떤 작업도 수행하지 않습니다.만약에autocommitFalse이고 이 메서드는 보류 중인 트랜잭션을 롤백하는 경우 새 트랜잭션이 암시적으로 시작됩니다.

닫다()

데이터베이스 연결을 닫습니다.자동 커밋~이다False, 보류 중인 모든 트랜잭션은 암묵적으로 롤백됩니다.autocommit~이다True또는레거시_트랜잭션_제어, 암묵적인 트랜잭션 제어가 실행되지 않습니다. 다음을 확인하십시오.저지르다()보류 중인 변경 사항이 손실되는 것을 방지하려면 닫기 전에 확인하세요.
데이터베이스 연결을 닫습니다.만약에autocommit False인 경우 보류 중인 모든 트랜잭션이 암시적으로 롤백됩니다.만약에autocommit참이거나LEGACY_TRANSACTION_CONTROL (레거시 트랜잭션 제어), 암시적 트랜잭션 제어는 수행되지 않습니다.닫기 전에 꼭 전화해보세요commit()보류 중인 변경 사항을 잃지 않으려면

실행하다(SQL을매개 변수=()/)

새로운 것을 만드세요커서객체 및 호출실행하다()그것에 주어진 것과 함께SQL을그리고매개변수새로운 커서 객체를 반환합니다.
새로 만들기Cursor이의를 제기하고 전화execute()메소드, 주어진 것을 전달sql 명령문과 매개변수.이거 새로 돌려줘Cursor물체.

실행다수(SQL을매개변수/)

새로운 것을 만드세요커서객체 및 호출실행다수()그것에 주어진 것과 함께SQL을그리고매개변수새로운 커서 객체를 반환합니다.
새로 만들기Cursor이의를 제기하고 전화executemany()메소드, 주어진 것을 전달sql 명령문 및 매개변수 시퀀스. 이를 통해 여러 매개변수 세트를 한 번에 실행할 수 있습니다.이거 새로 돌려줘Cursor물체.

스크립트 실행(SQL 스크립트/)

새로운 것을 만드세요커서객체 및 호출실행스크립트()그것에 주어진 것과 함께SQL 스크립트새로운 커서 객체를 반환합니다.
새로 만들기Cursor이의를 제기하고 전화executescript() 메소드, 지정된 SQL 스크립트를 전달합니다. 이를 통해 스크립트에서 세미콜론으로 구분된 여러 SQL 문을 실행할 수 있습니다.이거 새로 돌려줘Cursor물체.

생성_함수(이름나르그기능*결정론적 = 거짓)

사용자 정의 SQL 함수를 생성하거나 제거합니다.
사용자 정의 SQL 함수를 생성하거나 제거합니다.

매개변수:

  • 이름 () – SQL 함수의 이름입니다.
    name(str) – SQL 함수의 이름입니다.

  • 나르그 (정수) – SQL 함수가 허용할 수 있는 인수의 수입니다.-1, 인수는 아무리 많아도 상관없습니다.
    narg (int) – SQL 함수가 허용할 수 있는 인수 수입니다. -1이면 임의 개수의 인수를 허용할 수 있음을 의미합니다.

  • 기능 (콜백| 없음) – A호출 가능SQL 함수가 호출될 때 호출됩니다. 호출 가능 항목은 다음을 반환해야 합니다.SQLite에서 기본적으로 지원하는 유형. 로 설정None기존 SQL 함수를 제거합니다.
    func (콜백 | 없음) – 이 호출 가능 객체(콜백)는 SQL 함수가 호출될 때 실행됩니다. 이 호출 가능 객체는 SQLite가 기본적으로 지원하는 유형을 반환해야 합니다. None으로 설정하면 기존 SQL 함수가 제거됩니다.

  • 결정론적 () - 만약에True, 생성된 SQL 함수는 다음과 같이 표시됩니다.결정론적이를 통해 SQLite는 추가 최적화를 수행할 수 있습니다.
    deterministic(bool) – True인 경우 생성된 SQL 함수를 결정적 함수로 표시하여 SQLite가 추가 최적화를 수행할 수 있도록 합니다.

인상:

지원되지 않음오류- 만약에결정론적SQLite 3.8.3보다 이전 버전에서 사용됩니다.

버전 3.8에서 변경된 사항: 다음이 추가되었습니다.결정론적매개변수.

예:

>>>

  1. >>> import hashlib
  2. >>> def md5sum(t):
  3. ... return hashlib.md5(t).hexdigest()
  4. >>> con = sqlite3.connect(":memory:")
  5. >>> con.create_function("md5", 1, md5sum)
  6. >>> for row in con.execute("SELECT md5(?)", (b"foo",)):
  7. ... print(row)
  8. ('acbd18db4cc2f85cedef654fccc4a4d8',)
  9. >>> con.close()
생성_집계(이름n_인수집계 클래스)

사용자 정의 SQL 집계 함수를 생성하거나 제거합니다.
사용자 정의 SQL 집계 함수를 생성하거나 제거합니다.

매개변수:

  • 이름 () – SQL 집계 함수의 이름입니다.
         name(str) – SQL 집계 함수의 이름입니다.

  • n_인수 (정수) – SQL 집계 함수가 허용할 수 있는 인수의 수입니다.-1, 인수는 아무리 많아도 상관없습니다.
    SQL 집계 함수가 허용할 수 있는 매개변수 수입니다. -1이면 임의 개수의 인수를 허용할 수 있음을 의미합니다.

  • 집계 클래스 (수업| 없음) –

    클래스는 다음 메서드를 구현해야 합니다.
    클래스는 다음 메서드를 구현해야 합니다.

    • step(): 집계에 행을 추가합니다.

    • finalize(): 집계의 최종 결과를 다음과 같이 반환합니다.SQLite에서 기본적으로 지원하는 유형.
      finalize(): 이 메소드는 집계의 최종 결과를 반환하는 데 사용됩니다.

    인수의 수step()방법은 다음에 의해 제어되어야 합니다.n_인수.
    step()메소드가 허용해야 하는 매개변수의 수는 다음과 같습니다.n_arg제어.

    로 설정None기존 SQL 집계 함수를 제거합니다.
    로 설정None기존 SQL 집계 함수를 제거합니다.

예:

  1. class MySum:
  2. def __init__(self):
  3. self.count = 0
  4. def step(self, value):
  5. self.count += value
  6. def finalize(self):
  7. return self.count
  8. con = sqlite3.connect(":memory:")
  9. con.create_aggregate("mysum", 1, MySum)
  10. cur = con.execute("CREATE TABLE test(i)")
  11. cur.execute("INSERT INTO test(i) VALUES(1)")
  12. cur.execute("INSERT INTO test(i) VALUES(2)")
  13. cur.execute("SELECT mysum(i) FROM test")
  14. print(cur.fetchone()[0])
  15. con.close()
create_window_function(이름매개변수 수집계 클래스/)

사용자 정의 집계 창 함수를 만들거나 제거합니다.

매개변수:

  • 이름 () – 생성하거나 제거할 SQL 집계 창 함수의 이름입니다.

  • 매개변수 수 (정수) – SQL 집계 창 함수가 허용할 수 있는 인수의 수입니다.-1, 인수는 아무리 많아도 상관없습니다.

  • 집계 클래스 (수업| 없음) –

    다음 메서드를 구현해야 하는 클래스:

    • step(): 현재 창에 행을 추가합니다.

    • value(): 집계의 현재 값을 반환합니다.

    • inverse(): 현재 창에서 행을 제거합니다.

    • finalize(): 집계의 최종 결과를 다음과 같이 반환합니다.SQLite에서 기본적으로 지원하는 유형.

    인수의 수step()그리고value()방법은 다음에 의해 제어되어야 합니다.매개변수 수.

    로 설정None기존 SQL 집계 창 함수를 제거합니다.

인상:

지원되지 않음오류– 집계 창 함수를 지원하지 않는 3.25.0보다 이전 버전의 SQLite와 함께 사용하는 경우.

버전 3.11에 추가되었습니다.

예:

# Example taken from https://www.sqlite.org/windowfunctions.html#udfwinfunc
class WindowSumInt:
    def __init__(self):
        self.count = 0

    def step(self, value):
        """Add a row to the current window."""
        self.count += value

    def value(self):
        """Return the current value of the aggregate."""
        return self.count

    def inverse(self, value):
        """Remove a row from the current window."""
        self.count -= value

    def finalize(self):
        """Return the final value of the aggregate.

        Any clean-up actions should be placed here.
        """
        return self.count


con = sqlite3.connect(":memory:")
cur = con.execute("CREATE TABLE test(x, y)")
values = [
    ("a", 4),
    ("b", 5),
    ("c", 3),
    ("d", 8),
    ("e", 1),
]
cur.executemany("INSERT INTO test VALUES(?, ?)", values)
con.create_window_function("sumint", 1, WindowSumInt)
cur.execute("""
    SELECT x, sumint(y) OVER (
        ORDER BY x ROWS BETWEEN 1 PRECEDING AND 1 FOLLOWING
    ) AS sum_y
    FROM test ORDER BY x
""")
print(cur.fetchall())
con.close()

생성_수집(이름호출 가능/)

이름이 지정된 정렬을 만듭니다.이름정렬 기능 사용호출 가능호출 가능두 번 통과되었습니다인수를 사용하고 반환해야 합니다.정수:

  • 1첫 번째가 두 번째보다 높게 주문된 경우

  • -1첫 번째가 두 번째보다 낮게 주문된 경우

  • 0만약 그들이 동등하게 주문된다면

다음 예에서는 역순 정렬 대조를 보여줍니다.

def collate_reverse(string1, string2):
    if string1 == string2:
        return 0
    elif string1 < string2:
        return 1
    else:
        return -1

con = sqlite3.connect(":memory:")
con.create_collation("reverse", collate_reverse)

cur = con.execute("CREATE TABLE test(x)")
cur.executemany("INSERT INTO test(x) VALUES(?)", [("a",), ("b",)])
cur.execute("SELECT x FROM test ORDER BY x COLLATE reverse")
for row in cur:
    print(row)
con.close()

설정하여 정렬 기능을 제거합니다.호출 가능에게None.

버전 3.11에서 변경: 정렬 이름에는 모든 유니코드 문자가 포함될 수 있습니다. 이전에는 ASCII 문자만 허용되었습니다.

방해하다()

연결에서 실행 중일 수 있는 모든 쿼리를 중단하려면 다른 스레드에서 이 메서드를 호출합니다. 중단된 쿼리는 다음을 발생시킵니다.운영 오류.

권한 부여자 설정(권한 부여자 콜백)

등록하다호출 가능 권한 부여자 콜백데이터베이스의 테이블 열에 액세스하려는 각 시도에 대해 호출됩니다. 콜백은 다음 중 하나를 반환해야 합니다.SQLITE_OKSQLITE_거부, 또는SQLITE_무시기본 SQLite 라이브러리에서 열에 대한 액세스를 처리하는 방법을 알려줍니다.

콜백에 대한 첫 번째 인수는 어떤 종류의 작업이 허가될 것인지를 나타냅니다. 두 번째와 세 번째 인수는 인수 또는None첫 번째 인수에 따라 다릅니다. 네 번째 인수는 해당되는 경우 데이터베이스 이름("main", "temp" 등)입니다. 다섯 번째 인수는 액세스 시도를 담당하는 가장 안쪽 트리거 또는 뷰의 이름입니다.None이 접근 시도가 입력 SQL 코드에서 직접 이루어진 경우.

첫 번째 인수에 대한 가능한 값과 첫 번째 인수에 따라 두 번째 및 세 번째 인수의 의미에 대해서는 SQLite 설명서를 참조하세요. 필요한 모든 상수는 다음에서 사용할 수 있습니다.sqlite3기준 치수.

통과None~처럼권한 부여자 콜백승인자가 비활성화됩니다.

버전 3.11에서 변경됨: 권한 부여자를 비활성화하기 위한 지원이 추가되었습니다.None.

진행률 핸들러 설정(진행 상황 핸들러N)

등록하다호출 가능 진행 상황 핸들러모든 경우에 호출됩니다NSQLite 가상 머신의 지침입니다. 이것은 예를 들어 GUI를 업데이트하기 위해 장기 실행 작업 중에 SQLite에서 호출을 받고 싶을 때 유용합니다.

이전에 설치된 진행률 처리기를 지우려면 다음 메서드를 호출하세요.None~을 위한진행 상황 핸들러.

핸들러 함수에서 0이 아닌 값을 반환하면 현재 실행 중인 쿼리가 종료되고 다음이 발생합니다.데이터베이스 오류예외.

set_trace_callback(추적 콜백)

등록하다호출 가능 추적 콜백SQLite 백엔드에서 실제로 실행되는 각 SQL 문에 대해 호출됩니다.

콜백에 전달되는 유일한 인수는 명령문입니다.) 실행 중입니다. 콜백의 반환 값은 무시됩니다. 백엔드는 전달된 명령문만 실행하지 않는다는 점에 유의하세요.커서.execute()방법. 다른 소스에는 다음이 포함됩니다.거래 관리sqlite3모듈과 현재 데이터베이스에 정의된 트리거의 실행.

통과None~처럼추적 콜백추적 콜백을 비활성화합니다.

메모

추적 콜백에서 발생한 예외는 전파되지 않습니다. 개발 및 디버깅 지원으로 다음을 사용합니다.콜백_추적 활성화()추적 콜백에서 발생한 예외에서 추적 백을 인쇄할 수 있도록 합니다.

버전 3.3에 추가되었습니다.

로드 확장을 활성화합니다(활성화됨/)

공유 라이브러리에서 SQLite 확장을 로드하도록 SQLite 엔진을 활성화합니다.활성화됨~이다True; 그렇지 않으면 SQLite 확장 프로그램 로딩을 허용하지 않습니다. SQLite 확장 프로그램은 새로운 함수, 집계 또는 완전히 새로운 가상 테이블 구현을 정의할 수 있습니다. 잘 알려진 확장 프로그램 중 하나는 SQLite와 함께 배포된 fulltext-search 확장 프로그램입니다.

메모

그만큼sqlite3모듈은 기본적으로 로드 가능한 확장 지원으로 빌드되지 않습니다. 일부 플랫폼(특히 macOS)에는 이 기능 없이 컴파일된 SQLite 라이브러리가 있기 때문입니다. 로드 가능한 확장 지원을 받으려면 다음을 전달해야 합니다.--로드 가능한 sqlite 확장 기능 활성화옵션구성하다.

제기하다감사 이벤트 sqlite3.enable_load_extension인수와 함께connectionenabled.

버전 3.2에 추가되었습니다.

버전 3.10에서 변경된 사항: 다음이 추가되었습니다.sqlite3.enable_load_extension감사 이벤트.

con.enable_load_extension(True)

# Load the fulltext search extension
con.execute("select load_extension('./fts3.so')")

# alternatively you can load the extension using an API call:
# con.load_extension("./fts3.so")

# disable extension loading again
con.enable_load_extension(False)

# example from SQLite wiki
con.execute("CREATE VIRTUAL TABLE recipe USING fts3(name, ingredients)")
con.executescript("""
    INSERT INTO recipe (name, ingredients) VALUES('broccoli stew', 'broccoli peppers cheese tomatoes');
    INSERT INTO recipe (name, ingredients) VALUES('pumpkin stew', 'pumpkin onions garlic celery');
    INSERT INTO recipe (name, ingredients) VALUES('broccoli pie', 'broccoli cheese onions flour');
    INSERT INTO recipe (name, ingredients) VALUES('pumpkin pie', 'pumpkin sugar flour butter');
    """)
for row in con.execute("SELECT rowid, name, ingredients FROM recipe WHERE name MATCH 'pie'"):
    print(row)

로드_확장(/*진입점=없음)

공유 라이브러리에서 SQLite 확장 프로그램을 로드합니다. 다음을 사용하여 확장 프로그램 로딩을 활성화합니다.로드 확장을 활성화합니다()이 메서드를 호출하기 전에.

매개변수:

  •  () – SQLite 확장 프로그램의 경로입니다.

  • 진입 지점 ( | 없음) – 진입점 이름.None(기본값), SQLite는 자체 진입점 이름을 제시합니다. SQLite 문서를 참조하세요.확장 프로그램 로딩자세한 내용은.

제기하다감사 이벤트 sqlite3.load_extension인수와 함께connectionpath.

버전 3.2에 추가되었습니다.

버전 3.10에서 변경된 사항: 다음이 추가되었습니다.sqlite3.load_extension감사 이벤트.

버전 3.12에서 변경된 사항: 다음이 추가되었습니다.진입 지점매개변수.

반복덤프()

반환반복자데이터베이스를 SQL 소스 코드로 덤프합니다. 나중에 복원하기 위해 메모리 내 데이터베이스를 저장할 때 유용합니다..dump명령에서sqlite3껍데기.

예:

# Convert file example.db to SQL dump file dump.sql
con = sqlite3.connect('example.db')
with open('dump.sql', 'w') as f:
    for line in con.iterdump():
        f.write('%sn' % line)
con.close()

또한보십시오

UTF-8이 아닌 텍스트 인코딩을 처리하는 방법

지원(표적*페이지=-1진행률=없음이름='메인'수면=0.250)

SQLite 데이터베이스의 백업을 만듭니다.

다른 클라이언트가 데이터베이스에 액세스하거나 동일한 연결로 동시에 액세스하는 경우에도 작동합니다.

매개변수:

  • 표적 (연결) – 백업을 저장할 데이터베이스 연결입니다.

  • 페이지 (정수) – 한 번에 복사할 페이지 수입니다. 다음과 같거나 작으면0, 전체 데이터베이스가 단일 단계로 복사됩니다. 기본값은 다음과 같습니다.-1.

  • 진전 (콜백| 없음) – 설정된 경우호출 가능, 모든 백업 반복에 대해 세 개의 정수 인수와 함께 호출됩니다.상태마지막 반복의남은아직 복사해야 할 페이지 수 및페이지 수. 기본값은 다음과 같습니다.None.

  • 이름 () – 백업할 데이터베이스의 이름입니다."main"(기본값) 주 데이터베이스의 경우"temp"임시 데이터베이스의 경우 또는 첨부된 사용자 정의 데이터베이스의 이름ATTACH DATABASESQL 문.

  •  (뜨다) – 나머지 페이지를 백업하려는 연속 시도 사이의 대기 시간(초)입니다.

예제 1, 기존 데이터베이스를 다른 데이터베이스로 복사:

def progress(status, remaining, total):
    print(f'Copied {total-remaining} of {total} pages...')

src = sqlite3.connect('example.db')
dst = sqlite3.connect('backup.db')
with dst:
    src.backup(dst, pages=1, progress=progress)
dst.close()
src.close()

예제 2, 기존 데이터베이스를 임시 복사본으로 복사:

src = sqlite3.connect('example.db')
dst = sqlite3.connect(':memory:')
src.backup(dst)
dst.close()
src.close()

버전 3.7에 추가되었습니다.

또한보십시오

UTF-8이 아닌 텍스트 인코딩을 처리하는 방법

getlimit(범주/)

연결 런타임 제한을 가져옵니다.

매개변수:

범주 (정수) – 그SQLite 제한 범주질의를 받습니다.

반환 유형:

정수

인상:

프로그래밍 오류- 만약에범주기본 SQLite 라이브러리에서 인식되지 않습니다.

예를 들어, SQL 문의 최대 길이를 쿼리합니다.연결 con(기본값은 1000000000):

>>>

>>> con.getlimit(sqlite3.SQLITE_LIMIT_SQL_LENGTH)
1000000000

버전 3.11에 추가되었습니다.

제한 설정(범주한계/)

연결 런타임 한도를 설정합니다. 하드 상한값 위로 한도를 늘리려는 시도는 하드 상한값으로 자동 잘립니다. 한도가 변경되었는지 여부에 관계없이 한도의 이전 값이 반환됩니다.

매개변수:

  • 범주 (정수) – 그SQLite 제한 범주설정됩니다.

  • 한계 (정수) – 새로운 한도의 값입니다. 음수이면 현재 한도는 변경되지 않습니다.

반환 유형:

정수

인상:

프로그래밍 오류- 만약에범주기본 SQLite 라이브러리에서 인식되지 않습니다.

예를 들어, 연결된 데이터베이스의 수를 1로 제한합니다.연결 con(기본 제한은 10입니다):

>>>

>>> con.setlimit(sqlite3.SQLITE_LIMIT_ATTACHED, 1)
10
>>> con.getlimit(sqlite3.SQLITE_LIMIT_ATTACHED)
1

버전 3.11에 추가되었습니다.

getconfig(/)

부울 연결 구성 옵션을 쿼리합니다.

매개변수:

 (정수) - ㅏSQLITE_DBCONFIG 코드.

반환 유형:

버전 3.12에 추가되었습니다.

설정 구성(활성화=참/)

부울 연결 구성 옵션을 설정합니다.

매개변수:

  •  (정수) - ㅏSQLITE_DBCONFIG 코드.

  • ~할 수 있게 하다 () – True구성 옵션을 활성화해야 하는지(기본값)False비활성화해야 하는지 여부.

버전 3.12에 추가되었습니다.

직렬화(*이름='메인')

데이터베이스를 직렬화합니다바이트객체. 일반적인 디스크 데이터베이스 파일의 경우 직렬화는 디스크 파일의 사본일 뿐입니다. 메모리 내 데이터베이스 또는 "임시" 데이터베이스의 경우 직렬화는 해당 데이터베이스가 디스크에 백업된 경우 디스크에 기록될 바이트 시퀀스와 동일합니다.

매개변수:

이름 () – 직렬화할 데이터베이스 이름입니다. 기본값은 다음과 같습니다."main".

반환 유형:

바이트

메모

이 방법은 기본 SQLite 라이브러리에 serialize API가 있는 경우에만 사용할 수 있습니다.

버전 3.11에 추가되었습니다.

역직렬화(데이터/*이름='메인')

역직렬화연재된데이터베이스를연결. 이 방법을 사용하면 데이터베이스 연결이 데이터베이스에서 끊어집니다.이름, 다시 열다이름직렬화에 기반한 메모리 내 데이터베이스로서데이터.

매개변수:

  • 데이터 (바이트) – 직렬화된 데이터베이스.

  • 이름 () – 역직렬화할 데이터베이스 이름입니다. 기본값은 다음과 같습니다."main".

인상:

메모

이 방법은 기본 SQLite 라이브러리에 역직렬화 API가 있는 경우에만 사용할 수 있습니다.

버전 3.11에 추가되었습니다.

자동 커밋

이 속성은 다음을 제어합니다.PEP 249- 규정을 준수하는 거래 행동.autocommit허용되는 값은 3개입니다.

바꾸다autocommit에게False새로운 거래를 열고 이를 변경합니다.True보류 중인 모든 거래를 커밋합니다.

보다autocommit 속성을 통한 트랜잭션 제어상세 사항은.

메모

그만큼격리 수준속성은 다음이 아니면 효과가 없습니다.자동 커밋~이다레거시_트랜잭션_제어.

버전 3.12에 추가되었습니다.

거래중

이 읽기 전용 속성은 저수준 SQLite에 해당합니다.자동 커밋 모드.

True트랜잭션이 활성화된 경우(커밋되지 않은 변경 사항이 있는 경우)False그렇지 않으면.

버전 3.2에 추가되었습니다.

격리 수준

제어합니다레거시 트랜잭션 처리 모드~의sqlite3. 로 설정된 경우None, 거래는 절대 암묵적으로 열리지 않습니다. 다음 중 하나로 설정된 경우"DEFERRED""IMMEDIATE", 또는"EXCLUSIVE", 기본에 해당하는SQLite 트랜잭션 동작암묵적 거래 관리수행됩니다.

에 의해 재정의되지 않는 경우격리 수준매개변수연결하다(), 기본값은"", 이는 별칭입니다"DEFERRED".

메모

사용 중자동 커밋거래 처리를 제어하려면 다음을 사용하는 것이 좋습니다.isolation_levelisolation_level효과가 없습니다자동 커밋로 설정되었습니다레거시_트랜잭션_제어(기본값).

행_팩토리

처음의행_팩토리~을 위한커서이 연결에서 생성된 개체입니다. 이 속성에 할당해도 영향을 받지 않습니다.row_factory이 연결에 속하는 기존 커서 중에서 새 커서만 해당됩니다.None기본적으로 각 행이 반환됨을 의미합니다.튜플.

보다행 팩토리를 생성하고 사용하는 방법상세 사항은.

텍스트 팩토리

호출 가능그것을 수락합니다바이트매개변수를 지정하고 해당 텍스트 표현을 반환합니다. 호출 가능 항목은 SQLite 값에 대해 호출됩니다.TEXT데이터 유형. 기본적으로 이 속성은 다음으로 설정됩니다..

보다UTF-8이 아닌 텍스트 인코딩을 처리하는 방법상세 사항은.

총 변경 사항

데이터베이스 연결이 열린 이후 수정, 삽입 또는 삭제된 데이터베이스 행의 총 수를 반환합니다.

커서 객체

Cursor객체는 다음을 나타냅니다.데이터베이스 커서SQL 문을 실행하고 페치 작업의 컨텍스트를 관리하는 데 사용됩니다. 커서는 다음을 사용하여 생성됩니다.연결.커서()또는 다음 중 하나를 사용하여연결 단축키 방법.

커서 객체는반복자, 즉 당신이라면실행하다()SELECT쿼리를 실행하면 커서를 반복하여 결과 행을 가져올 수 있습니다.

for row in cur.execute("SELECT t FROM data"):
    print(row)

수업sqlite3.커서

커서인스턴스에는 다음과 같은 속성과 메서드가 있습니다.

실행하다(SQL을매개 변수=()/)

단일 SQL 문을 실행하고 선택적으로 Python 값을 바인딩합니다.플레이스홀더.

매개변수:

인상:

프로그래밍 오류- 만약에SQL을두 개 이상의 SQL 문을 포함합니다.

만약에자동 커밋~이다레거시_트랜잭션_제어격리 수준아니다NoneSQL을이다INSERTUPDATEDELETE, 또는REPLACE문장이 있고 열려 있는 트랜잭션이 없으면 트랜잭션은 실행되기 전에 암묵적으로 열립니다.SQL을.

버전 3.12부터 더 이상 사용되지 않으며 버전 3.14에서 제거됩니다.사용 중단 경고만약 방출된다면명명된 플레이스홀더사용되고 있으며매개변수는 시퀀스 대신에사전. Python 3.14부터프로그래밍 오류대신 인상될 예정입니다.

사용실행스크립트()여러 개의 SQL 문을 실행합니다.

실행다수(SQL을매개변수/)

모든 항목에 대해매개변수, 반복적으로 실행매개변수화됨DML SQL 문SQL을.

동일한 암묵적 트랜잭션 처리를 사용합니다.실행하다().

매개변수:

인상:

프로그래밍 오류- 만약에SQL을두 개 이상의 SQL 문을 포함하고 있거나 DML 문이 아닙니다.

예:

rows = [
    ("row1",),
    ("row2",),
]
# cur is an sqlite3.Cursor object
cur.executemany("INSERT INTO data VALUES(?)", rows)

메모

DML 문을 포함하여 결과 행은 모두 삭제됩니다.반환 절.

버전 3.12부터 더 이상 사용되지 않으며 버전 3.14에서 제거됩니다.사용 중단 경고만약 방출된다면명명된 플레이스홀더사용되며 항목은 다음과 같습니다.매개변수대신 시퀀스입니다사전s. Python 3.14부터 시작하여,프로그래밍 오류대신 인상될 예정입니다.

스크립트 실행(SQL 스크립트/)

SQL 문을 실행합니다.SQL 스크립트. 만약자동 커밋~이다레거시_트랜잭션_제어그리고 보류 중인 거래가 있고 암묵적으로COMMIT문장이 먼저 실행됩니다. 다른 암묵적 트랜잭션 제어는 수행되지 않습니다. 모든 트랜잭션 제어는 다음에 추가되어야 합니다.SQL 스크립트.

SQL 스크립트~이어야 합니다.

예:

# cur is an sqlite3.Cursor object
cur.executescript("""
    BEGIN;
    CREATE TABLE person(firstname, lastname, age);
    CREATE TABLE book(title, author, published);
    CREATE TABLE publisher(name, address);
    COMMIT;
""")

페치원()

만약에행_팩토리~이다None, 다음 행 쿼리 결과 세트를 다음과 같이 반환합니다.튜플. 그렇지 않으면 행 팩토리에 전달하고 결과를 반환합니다. 반환None더 이상 데이터가 없는 경우.

페치매니(크기=커서.배열크기)

쿼리 결과의 다음 행 세트를 다음과 같이 반환합니다.목록더 이상 사용할 수 있는 행이 없으면 빈 목록을 반환합니다.

호출당 가져올 행 수는 다음에 의해 지정됩니다.크기매개변수. 만약크기주어지지 않는다,배열 크기가져올 행의 수를 결정합니다.크기행이 여러 개 있는 경우, 사용 가능한 행만큼 반환됩니다.

성능 고려 사항이 포함되어 있음을 유의하십시오.크기매개변수. 최적의 성능을 위해서는 보통 arraysize 속성을 사용하는 것이 가장 좋습니다.크기매개변수를 사용하는 경우 하나의 매개변수에서 동일한 값을 유지하는 것이 가장 좋습니다.페치매니()다음으로 전화하세요.

페치올()

쿼리 결과의 모든(나머지) 행을 다음과 같이 반환합니다.목록. 사용 가능한 행이 없으면 빈 목록을 반환합니다.배열 크기속성은 이 작업의 성능에 영향을 미칠 수 있습니다.

닫다()

지금 커서를 닫습니다(언제든지가 아닌)__del__라고 불립니다).

이 지점부터 커서를 사용할 수 없습니다.프로그래밍 오류커서로 작업을 시도하면 예외가 발생합니다.

입력 크기 설정(사이즈/)

DB-API에 의해 요구됨. 아무것도 하지 않음sqlite3.

출력크기 설정(크기열=없음/)

DB-API에 의해 요구됨. 아무것도 하지 않음sqlite3.

배열 크기

반환되는 행의 수를 제어하는 ​​읽기/쓰기 속성페치매니()기본값은 1이며, 이는 호출 당 하나의 행을 가져온다는 것을 의미합니다.

연결

SQLite 데이터베이스를 제공하는 읽기 전용 속성연결커서에 속함. A커서호출하여 생성된 객체con.커서()가질 것이다연결참조하는 속성범죄자:

>>>

>>> con = sqlite3.connect(":memory:")
>>> cur = con.cursor()
>>> cur.connection == con
True
>>> con.close()

설명

마지막 쿼리의 열 이름을 제공하는 읽기 전용 속성입니다. Python DB API와 호환되도록 하기 위해 각 열에 대해 7-튜플을 반환하며 각 튜플의 마지막 6개 항목은 다음과 같습니다.None.

설정되었습니다SELECT일치하는 행이 없는 문장도 있습니다.

마지막

마지막으로 삽입된 행의 행 ID를 제공하는 읽기 전용 속성입니다. 성공한 후에만 업데이트됩니다.INSERT또는REPLACE사용하는 문장실행하다()방법. 다른 진술의 경우,실행다수()또는실행스크립트()또는 삽입이 실패한 경우 값lastrowid변경되지 않습니다. 초기값은lastrowid~이다None.

메모

삽입합니다WITHOUT ROWID표는 기록되지 않았습니다.

버전 3.6에서 변경됨: 다음에 대한 지원이 추가되었습니다.REPLACE성명.

행 개수

수정된 행의 수를 제공하는 읽기 전용 속성INSERTUPDATEDELETE, 그리고REPLACE진술;이다-1CTE 쿼리를 포함한 다른 진술의 경우. 다음에 의해서만 업데이트됩니다.실행하다()그리고실행다수()명령문이 완료될 때까지 실행된 후에 메서드가 실행됩니다. 즉, 결과 행은 모두 페치되어야 합니다.rowcount업데이트 할.

행_팩토리

여기에서 행을 가져오는 방법을 제어합니다.Cursor표현됩니다. 만약None, 행은 다음과 같이 표현됩니다.튜플. 포함된 것으로 설정할 수 있습니다.sqlite3.행; 또는호출 가능두 개의 인수를 허용하는커서객체와tuple행 값을 반환하고 SQLite 행을 나타내는 사용자 지정 개체를 반환합니다.

기본값은 무엇으로 설정됩니까?연결.행_팩토리~로 설정되었습니다Cursor생성되었습니다. 이 속성에 할당해도 영향을 미치지 않습니다.연결.행_팩토리부모 연결의.

보다행 팩토리를 생성하고 사용하는 방법상세 사항은.

행 객체

수업sqlite3.행

Row인스턴스는 고도로 최적화된 역할을 합니다.행_팩토리~을 위한연결객체입니다. 반복, 동등성 테스트를 지원합니다.길이(), 그리고매핑열 이름과 인덱스로 접근합니다.

Row객체는 동일한 열 이름과 값을 가지고 있으면 동일한 것으로 비교됩니다.

보다행 팩토리를 생성하고 사용하는 방법상세 사항은.

키()

반환하다목록열 이름으로서. 쿼리 직후에는 각 튜플의 첫 번째 멤버입니다.커서 설명.

버전 3.5에서 변경 사항: 슬라이싱 지원이 추가되었습니다.

블롭 객체

수업sqlite3.블롭

버전 3.11에 추가되었습니다.

얼룩인스턴스는파일과 같은 객체SQLite BLOB에서 데이터를 읽고 쓸 수 있습니다. 호출길이(블롭)blob의 크기(바이트 수)를 얻으려면 인덱스를 사용하고슬라이스Blob 데이터에 직접 접근합니다.

사용얼룩로서컨텍스트 관리자사용 후에는 블롭 핸들이 닫혀 있는지 확인하세요.

con = sqlite3.connect(":memory:")
con.execute("CREATE TABLE test(blob_col blob)")
con.execute("INSERT INTO test(blob_col) VALUES(zeroblob(13))")

# Write to our blob, using two write operations:
with con.blobopen("test", "blob_col", 1) as blob:
    blob.write(b"hello, ")
    blob.write(b"world.")
    # Modify the first and last bytes of our blob
    blob[0] = ord("H")
    blob[-1] = ord("!")

# Read the contents of our blob
with con.blobopen("test", "blob_col", 1) as blob:
    greeting = blob.read()

print(greeting)  # outputs "b'Hello, world!'"
con.close()

닫다()

덩어리를 닫으세요.

이 지점부터는 blob을 사용할 수 없습니다.오류blob에 대해 추가 작업을 시도하면 (또는 하위 클래스) 예외가 발생합니다.

읽다(길이=-1/)

읽다길이현재 오프셋 위치에 있는 blob의 데이터 바이트. blob의 끝에 도달하면 EOF까지의 데이터가 반환됩니다.길이지정되지 않았거나 음수입니다.읽다()블롭의 끝까지 읽습니다.

쓰다(데이터/)

쓰다데이터현재 오프셋의 blob에. 이 함수는 blob 길이를 변경할 수 없습니다. blob 끝을 넘어서 쓰면 발생합니다.값 오류.

말하다()

blob의 현재 액세스 위치를 반환합니다.

구하다(오프셋원점=os.SEEK_SET/)

blob의 현재 액세스 위치를 다음으로 설정합니다.오프셋. 그기원인수는 기본적으로 다음과 같습니다.os.SEEK_SET(절대 블롭 위치). 기타 값기원~이다os.SEEK_CUR(현재 위치를 기준으로 검색) 및os.SEEK_END(덩어리의 끝부분을 기준으로 탐색).

PrepareProtocol 객체

수업sqlite3.프로토콜 준비

PrepareProtocol 유형의 단일 목적은 다음과 같이 작동하는 것입니다.PEP 246객체에 대한 스타일 적응 프로토콜적응하다에게네이티브 SQLite 유형.

예외

예외 계층은 DB-API 2.0에 의해 정의됩니다.PEP 249).

예외sqlite3.경고

이 예외는 현재 다음에서 발생하지 않습니다.sqlite3모듈이지만 사용하는 응용 프로그램에서 발생할 수 있습니다.sqlite3예를 들어 사용자 정의 함수가 삽입하는 동안 데이터를 잘라내는 경우입니다.Warning의 하위 클래스입니다예외.

예외sqlite3.오류

이 모듈의 다른 예외의 기본 클래스입니다. 이것을 사용하여 하나의 단일 예외로 모든 오류를 잡습니다.제외하고성명.Error의 하위 클래스입니다예외.

예외가 SQLite 라이브러리 내부에서 발생한 경우 다음 두 가지 속성이 예외에 추가됩니다.

sqlite_오류코드

숫자 오류 코드는 다음과 같습니다.SQLite API

버전 3.11에 추가되었습니다.

sqlite_오류 이름

숫자 오류 코드의 상징적 이름SQLite API

버전 3.11에 추가되었습니다.

예외sqlite3.인터페이스 오류

저수준 SQLite C API의 오용으로 인해 발생한 예외입니다. 즉, 이 예외가 발생하면 아마도 버그가 있음을 나타냅니다.sqlite3기준 치수.InterfaceError의 하위 클래스입니다오류.

예외sqlite3.데이터베이스 오류

데이터베이스와 관련된 오류에 대해 발생하는 예외입니다. 이는 여러 유형의 데이터베이스 오류에 대한 기본 예외로 사용됩니다. 특수화된 하위 클래스를 통해서만 암묵적으로 발생합니다.DatabaseError의 하위 클래스입니다오류.

예외sqlite3.데이터 오류

처리된 데이터와 관련된 문제(예: 범위를 벗어난 숫자 값, 너무 긴 문자열 등)로 인해 발생하는 예외입니다.DataError의 하위 클래스입니다데이터베이스 오류.

예외sqlite3.운영 오류

데이터베이스의 작동과 관련된 오류에 대해 발생하는 예외로, 반드시 프로그래머의 제어 하에 있지는 않습니다. 예를 들어, 데이터베이스 경로를 찾을 수 없거나 트랜잭션을 처리할 수 없습니다.OperationalError의 하위 클래스입니다데이터베이스 오류.

예외sqlite3.IntegrityError

데이터베이스의 관계적 무결성이 영향을 받을 때 발생하는 예외입니다. 예: 외래 키 검사가 실패합니다. 이것은 다음의 하위 클래스입니다.데이터베이스 오류.

예외sqlite3.내부 오류

SQLite가 내부 오류를 만났을 때 발생하는 예외입니다. 이것이 발생하면 런타임 SQLite 라이브러리에 문제가 있음을 나타낼 수 있습니다.InternalError의 하위 클래스입니다데이터베이스 오류.

예외sqlite3.프로그래밍오류

예외가 발생함sqlite3API 프로그래밍 오류(예: 쿼리에 잘못된 바인딩 수를 제공하거나 닫힌 작업에서 작동하려고 시도)연결ProgrammingError의 하위 클래스입니다데이터베이스 오류.

예외sqlite3.지원되지 않음오류

기본 SQLite 라이브러리에서 메서드나 데이터베이스 API를 지원하지 않는 경우 발생하는 예외입니다. 예를 들어, 설정결정론적에게True~에생성_함수(), 기본 SQLite 라이브러리가 결정적 함수를 지원하지 않는 경우.NotSupportedError의 하위 클래스입니다데이터베이스 오류.

SQLite 및 Python 유형

SQLite는 기본적으로 다음 유형을 지원합니다.NULLINTEGERREALTEXTBLOB.

따라서 다음 Python 유형은 아무 문제 없이 SQLite로 전송할 수 있습니다.

파이썬 타입

SQLite 유형

None

NULL

정수

INTEGER

뜨다

REAL

TEXT

바이트

BLOB

SQLite 유형이 기본적으로 Python 유형으로 변환되는 방식은 다음과 같습니다.

SQLite 유형

파이썬 타입

NULL

None

INTEGER

정수

REAL

뜨다

TEXT

에 따라 달라집니다텍스트 팩토리기본적으로

BLOB

바이트

의 유형 시스템sqlite3모듈은 두 가지 방법으로 확장 가능합니다. SQLite 데이터베이스에 추가 Python 유형을 저장할 수 있습니다.객체 어댑터, 그리고 당신은 할 수 있습니다sqlite3모듈은 SQLite 유형을 Python 유형으로 변환합니다.변환기.

기본 어댑터 및 변환기(더 이상 사용되지 않음)

메모

기본 어댑터와 변환기는 Python 3.12부터 더 이상 사용되지 않습니다. 대신 다음을 사용하세요.어댑터 및 컨버터 레시피귀하의 요구 사항에 맞게 조정하세요.

더 이상 사용되지 않는 기본 어댑터와 변환기는 다음으로 구성됩니다.

메모

기본 "타임스탬프" 변환기는 데이터베이스의 UTC 오프셋을 무시하고 항상 순진한 결과를 반환합니다.날짜시간.날짜시간개체. 타임스탬프에서 UTC 오프셋을 유지하려면 변환기를 비활성화하거나 오프셋 인식 변환기를 등록하십시오.레지스터_컨버터().

버전 3.12부터 더 이상 사용되지 않습니다.

명령줄 인터페이스

그만큼sqlite3모듈은 인터프리터의 스크립트로 호출될 수 있습니다.-중switch, 간단한 SQLite 셸을 제공하기 위해. 인수 서명은 다음과 같습니다.

python -m sqlite3 [-h] [-v] [filename] [sql]

유형.quit또는 CTRL-D를 눌러 셸을 종료합니다.

-h, --도움말

CLI 도움말을 인쇄합니다.

-v, --버전

기본 SQLite 라이브러리 버전을 출력합니다.

버전 3.12에 추가되었습니다.

사용 방법 가이드

SQL 쿼리에서 플레이스홀더를 사용하여 값을 바인딩하는 방법

SQL 작업은 일반적으로 Python 변수의 값을 사용해야 합니다. 그러나 Python의 문자열 작업을 사용하여 쿼리를 조립하는 것은 취약하므로 조심하십시오.SQL 주입 공격예를 들어, 공격자는 작은 따옴표를 닫고 다음을 삽입할 수 있습니다.OR TRUE모든 행을 선택하려면:

>>>

>>> # Never do this -- insecure!
>>> symbol = input()
' OR TRUE; --
>>> sql = "SELECT * FROM stocks WHERE symbol = '%s'" % symbol
>>> print(sql)
SELECT * FROM stocks WHERE symbol = '' OR TRUE; --'
>>> cur.execute(sql)

대신 DB-API의 매개변수 대체를 사용합니다. 쿼리 문자열에 변수를 삽입하려면 문자열에 자리 표시자를 사용하고 실제 값을 쿼리에 대체하여 다음과 같이 제공합니다.튜플커서의 두 번째 인수에 대한 값실행하다()방법.

SQL 문은 두 가지 종류의 플레이스홀더 중 하나를 사용할 수 있습니다. 물음표(qmark 스타일) 또는 명명된 플레이스홀더(명명된 스타일). qmark 스타일의 경우,매개변수~이어야 합니다순서플레이스홀더의 수와 길이가 일치해야 하거나프로그래밍 오류제기됩니다. 명명된 스타일의 경우,매개변수의 인스턴스여야 합니다.사전(또는 하위 클래스) 모든 명명된 매개변수에 대한 키를 포함해야 합니다. 추가 항목은 무시됩니다. 다음은 두 스타일의 예입니다.

con = sqlite3.connect(":memory:")
cur = con.execute("CREATE TABLE lang(name, first_appeared)")

# This is the named style used with executemany():
data = (
    {"name": "C", "year": 1972},
    {"name": "Fortran", "year": 1957},
    {"name": "Python", "year": 1991},
    {"name": "Go", "year": 2009},
)
cur.executemany("INSERT INTO lang VALUES(:name, :year)", data)

# This is the qmark style used in a SELECT query:
params = (1972,)
cur.execute("SELECT * FROM lang WHERE first_appeared = ?", params)
print(cur.fetchall())
con.close()

메모

PEP 249숫자 자리 표시자는~ 아니다지원됨. 사용 시 명명된 플레이스홀더로 해석됩니다.

사용자 정의 Python 유형을 SQLite 값에 적용하는 방법

SQLite는 기본적으로 제한된 데이터 유형 집합만 지원합니다. SQLite 데이터베이스에 사용자 정의 Python 유형을 저장하려면적응하다그들 중 한 사람에게SQLite가 기본적으로 이해하는 Python 유형.

Python 객체를 SQLite 유형에 맞게 조정하는 방법에는 두 가지가 있습니다. 객체가 스스로 조정되도록 하거나어댑터 호출 가능. 후자는 전자보다 우선합니다. 사용자 정의 유형을 내보내는 라이브러리의 경우 해당 유형이 스스로 적응하도록 하는 것이 합리적일 수 있습니다. 애플리케이션 개발자의 경우 사용자 정의 어댑터 함수를 등록하여 직접 제어하는 ​​것이 더 합리적일 수 있습니다.

적응형 객체를 작성하는 방법

우리가 다음과 같은 것을 가지고 있다고 가정해 보자.Point좌표 쌍을 나타내는 클래스x그리고y, 데카르트 좌표계에서. 좌표 쌍은 세미콜론으로 좌표를 구분하여 데이터베이스에 텍스트 문자열로 저장됩니다. 이것은 다음을 추가하여 구현할 수 있습니다.__conform__(self, protocol)적응된 값을 반환하는 메서드입니다. 전달된 객체규약유형이 될 것입니다프로토콜 준비.

class Point:
    def __init__(self, x, y):
        self.x, self.y = x, y

    def __conform__(self, protocol):
        if protocol is sqlite3.PrepareProtocol:
            return f"{self.x};{self.y}"

con = sqlite3.connect(":memory:")
cur = con.cursor()

cur.execute("SELECT ?", (Point(4.0, -3.2),))
print(cur.fetchone()[0])
con.close()
어댑터 호출 가능 항목을 등록하는 방법

다른 가능성은 Python 객체를 SQLite 호환 유형으로 변환하는 함수를 만드는 것입니다. 이 함수는 다음을 사용하여 등록할 수 있습니다.등록_어댑터().

class Point:
    def __init__(self, x, y):
        self.x, self.y = x, y

def adapt_point(point):
    return f"{point.x};{point.y}"

sqlite3.register_adapter(Point, adapt_point)

con = sqlite3.connect(":memory:")
cur = con.cursor()

cur.execute("SELECT ?", (Point(1.0, 2.5),))
print(cur.fetchone()[0])
con.close()

SQLite 값을 사용자 정의 Python 유형으로 변환하는 방법

어댑터를 작성하면 변환할 수 있습니다.~에서사용자 정의 Python 유형에게SQLite 값. 변환할 수 있도록~에서SQLite 값에게사용자 정의 Python 유형을 사용합니다.변환기.

다시 돌아가보자Point클래스. 세미콜론으로 구분된 x 및 y 좌표를 SQLite에 문자열로 저장했습니다.

먼저, 문자열을 매개변수로 받아들이고 다음을 구성하는 변환 함수를 정의합니다.Point그것으로부터 반대하십시오.

메모

변환기 기능은 다음과 같습니다.언제나통과했다바이트객체, 기본 SQLite 데이터 유형과 상관없이.

def convert_point(s):
    x, y = map(float, s.split(b";"))
    return Point(x, y)

이제 우리는 말해야 합니다sqlite3주어진 SQLite 값을 변환해야 하는 경우. 이는 데이터베이스에 연결할 때 수행됩니다.감지_유형매개변수연결하다(). 세 가지 옵션이 있습니다:

  • 암시적: 설정감지_유형에게PARSE_DECLTYPES

  • 명시적: 설정감지_유형에게PARSE_COLNAMES

  • 둘 다: 설정감지_유형에게sqlite3.PARSE_DECLTYPES | sqlite3.PARSE_COLNAMES. 열 이름은 선언된 유형보다 우선합니다.

다음 예는 암시적 접근 방식과 명시적 접근 방식을 보여줍니다.

class Point:
    def __init__(self, x, y):
        self.x, self.y = x, y

    def __repr__(self):
        return f"Point({self.x}, {self.y})"

def adapt_point(point):
    return f"{point.x};{point.y}"

def convert_point(s):
    x, y = list(map(float, s.split(b";")))
    return Point(x, y)

# Register the adapter and converter
sqlite3.register_adapter(Point, adapt_point)
sqlite3.register_converter("point", convert_point)

# 1) Parse using declared types
p = Point(4.0, -3.2)
con = sqlite3.connect(":memory:", detect_types=sqlite3.PARSE_DECLTYPES)
cur = con.execute("CREATE TABLE test(p point)")

cur.execute("INSERT INTO test(p) VALUES(?)", (p,))
cur.execute("SELECT p FROM test")
print("with declared types:", cur.fetchone()[0])
cur.close()
con.close()

# 2) Parse using column names
con = sqlite3.connect(":memory:", detect_types=sqlite3.PARSE_COLNAMES)
cur = con.execute("CREATE TABLE test(p)")

cur.execute("INSERT INTO test(p) VALUES(?)", (p,))
cur.execute('SELECT p AS "p [point]" FROM test')
print("with column names:", cur.fetchone()[0])
cur.close()
con.close()

어댑터 및 컨버터 레시피

이 섹션에서는 일반적인 어댑터와 컨버터에 대한 조리법을 보여줍니다.

import datetime
import sqlite3

def adapt_date_iso(val):
    """Adapt datetime.date to ISO 8601 date."""
    return val.isoformat()

def adapt_datetime_iso(val):
    """Adapt datetime.datetime to timezone-naive ISO 8601 date."""
    return val.isoformat()

def adapt_datetime_epoch(val):
    """Adapt datetime.datetime to Unix timestamp."""
    return int(val.timestamp())

sqlite3.register_adapter(datetime.date, adapt_date_iso)
sqlite3.register_adapter(datetime.datetime, adapt_datetime_iso)
sqlite3.register_adapter(datetime.datetime, adapt_datetime_epoch)

def convert_date(val):
    """Convert ISO 8601 date to datetime.date object."""
    return datetime.date.fromisoformat(val.decode())

def convert_datetime(val):
    """Convert ISO 8601 datetime to datetime.datetime object."""
    return datetime.datetime.fromisoformat(val.decode())

def convert_timestamp(val):
    """Convert Unix epoch timestamp to datetime.datetime object."""
    return datetime.datetime.fromtimestamp(int(val))

sqlite3.register_converter("date", convert_date)
sqlite3.register_converter("datetime", convert_datetime)
sqlite3.register_converter("timestamp", convert_timestamp)

연결 단축키 방법을 사용하는 방법

사용하여실행하다()실행다수(), 그리고실행스크립트()의 방법연결클래스를 사용하면 (종종 불필요한) 코드를 만들 필요가 없으므로 코드를 더 간결하게 작성할 수 있습니다.커서객체를 명시적으로 지정합니다. 대신,커서객체는 암묵적으로 생성되고 이러한 단축 메서드는 커서 객체를 반환합니다. 이렇게 하면 다음을 실행할 수 있습니다.SELECT문장을 작성하고 단 한 번의 호출만으로 직접 반복합니다.연결물체.

# Create and fill the table.
con = sqlite3.connect(":memory:")
con.execute("CREATE TABLE lang(name, first_appeared)")
data = [
    ("C++", 1985),
    ("Objective-C", 1984),
]
con.executemany("INSERT INTO lang(name, first_appeared) VALUES(?, ?)", data)

# Print the table contents
for row in con.execute("SELECT name, first_appeared FROM lang"):
    print(row)

print("I just deleted", con.execute("DELETE FROM lang").rowcount, "rows")

# close() is not a shortcut method and it's not called automatically;
# the connection object should be closed manually
con.close()

연결 컨텍스트 관리자를 사용하는 방법

연결객체는 컨텍스트 관리자의 본문을 떠날 때 열려 있는 트랜잭션을 자동으로 커밋하거나 롤백하는 컨텍스트 관리자로 사용될 수 있습니다. 본문이~와 함께문장이 예외 없이 완료되면 트랜잭션이 커밋됩니다. 이 커밋이 실패하거나 본문이with문장이 포착되지 않은 예외를 발생시키면 트랜잭션이 롤백됩니다.자동 커밋~이다False, 커밋이나 롤백 후에 새로운 트랜잭션이 암묵적으로 열립니다.

본문을 떠날 때 미결거래가 없는 경우with진술, 또는 만약자동 커밋~이다True컨텍스트 관리자는 아무것도 하지 않습니다.

메모

컨텍스트 관리자는 암묵적으로 새 트랜잭션을 열거나 연결을 닫지 않습니다. 닫는 컨텍스트 관리자가 필요한 경우 다음을 사용하는 것을 고려하세요.컨텍스트 라이브러리.닫기().

con = sqlite3.connect(":memory:")
con.execute("CREATE TABLE lang(id INTEGER PRIMARY KEY, name VARCHAR UNIQUE)")

# Successful, con.commit() is called automatically afterwards
with con:
    con.execute("INSERT INTO lang(name) VALUES(?)", ("Python",))

# con.rollback() is called after the with block finishes with an exception,
# the exception is still raised and must be caught
try:
    with con:
        con.execute("INSERT INTO lang(name) VALUES(?)", ("Python",))
except sqlite3.IntegrityError:
    print("couldn't add Python twice")

# Connection object used as context manager only commits or rollbacks transactions,
# so the connection object should be closed manually
con.close()

SQLite URI를 사용하는 방법

유용한 URI 트릭은 다음과 같습니다.

  • 읽기 전용 모드로 데이터베이스 열기:

>>>

>>> con = sqlite3.connect("file:tutorial.db?mode=ro", uri=True)
>>> con.execute("CREATE TABLE readonly(data)")
Traceback (most recent call last):
OperationalError: attempt to write a readonly database
  • 아직 존재하지 않는 경우 암묵적으로 새 데이터베이스 파일을 생성하지 마십시오.운영 오류새 파일을 만들 수 없는 경우:

>>>

>>> con = sqlite3.connect("file:nosuchdb.db?mode=rw", uri=True)
Traceback (most recent call last):
OperationalError: unable to open database file
  • 공유된 이름이 지정된 메모리 내 데이터베이스를 만듭니다.

db = "file:mem1?mode=memory&cache=shared"
con1 = sqlite3.connect(db, uri=True)
con2 = sqlite3.connect(db, uri=True)
with con1:
    con1.execute("CREATE TABLE shared(data)")
    con1.execute("INSERT INTO shared VALUES(28)")
res = con2.execute("SELECT data FROM shared")
assert res.fetchone() == (28,)

con1.close()
con2.close()

매개변수 목록을 포함한 이 기능에 대한 자세한 내용은 다음에서 찾을 수 있습니다.SQLite URI 문서.

행 팩토리를 생성하고 사용하는 방법

기본적으로,sqlite3각 행을 다음과 같이 나타냅니다.튜플. 만약tuple귀하의 요구 사항에 맞지 않으면 다음을 사용할 수 있습니다.sqlite3.행클래스 또는 커스텀행_팩토리.

하는 동안row_factory속성으로 존재합니다커서그리고연결, 설정하는 것이 좋습니다.연결.행_팩토리따라서 연결에서 생성된 모든 커서는 동일한 행 팩토리를 사용합니다.

Row최소한의 메모리 오버헤드와 성능 영향으로 열에 대한 인덱스화되고 대소문자를 구분하지 않는 명명된 액세스를 제공합니다.tuple. 사용Row행 팩토리로 지정하려면 다음을 수행합니다.row_factory기인하다:

>>>

>>> con = sqlite3.connect(":memory:")
>>> con.row_factory = sqlite3.Row

이제 쿼리가 반환됩니다.Row사물:

>>>

>>> res = con.execute("SELECT 'Earth' AS name, 6378 AS radius")
>>> row = res.fetchone()
>>> row.keys()
['name', 'radius']
>>> row[0]         # Access by index.
'Earth'
>>> row["name"]    # Access by name.
'Earth'
>>> row["RADIUS"]  # Column names are case-insensitive.
6378
>>> con.close()

메모

그만큼FROM절은 생략될 수 있습니다SELECT위의 예와 같이 문장을 사용합니다. 이러한 경우 SQLite는 주어진 별칭을 사용하여 표현식(예: 리터럴)으로 정의된 열이 있는 단일 행을 반환합니다.expr AS alias.

사용자 정의를 만들 수 있습니다행_팩토리각 행을 다음과 같이 반환합니다.사전, 열 이름이 값에 매핑됨:

def dict_factory(cursor, row):
    fields = [column[0] for column in cursor.description]
    return {key: value for key, value in zip(fields, row)}

이를 사용하면 이제 쿼리가 다음을 반환합니다.dict대신에tuple:

>>>

>>> con = sqlite3.connect(":memory:")
>>> con.row_factory = dict_factory
>>> for row in con.execute("SELECT 1 AS a, 2 AS b"):
...     print(row)
{'a': 1, 'b': 2}
>>> con.close()

다음 행 팩토리는 다음을 반환합니다.명명된 튜플:

from collections import namedtuple

def namedtuple_factory(cursor, row):
    fields = [column[0] for column in cursor.description]
    cls = namedtuple("Row", fields)
    return cls._make(row)

namedtuple_factory()다음과 같이 사용할 수 있습니다:

>>>

>>> con = sqlite3.connect(":memory:")
>>> con.row_factory = namedtuple_factory
>>> cur = con.execute("SELECT 1 AS a, 2 AS b")
>>> row = cur.fetchone()
>>> row
Row(a=1, b=2)
>>> row[0]  # Indexed access.
1
>>> row.b   # Attribute access.
2
>>> con.close()

약간의 조정을 통해 위의 조리법을 사용하도록 조정할 수 있습니다.데이터 클래스또는 다른 사용자 정의 클래스 대신명명된 튜플.

UTF-8이 아닌 텍스트 인코딩을 처리하는 방법

기본적으로,sqlite3사용하다SQLite 값을 다음과 같이 조정합니다.TEXT데이터 유형입니다. 이것은 UTF-8로 인코딩된 텍스트에 잘 작동하지만 다른 인코딩과 잘못된 UTF-8에는 실패할 수 있습니다. 사용자 정의를 사용할 수 있습니다.텍스트 팩토리이런 경우를 처리합니다.

SQLite 때문에유연한 타이핑, 테이블 열에 다음과 같은 내용이 있는 경우가 드물지 않습니다.TEXTUTF-8이 아닌 인코딩을 포함하는 데이터 유형 또는 임의의 데이터. 이를 보여주기 위해 ISO-8859-2(Latin-2) 인코딩 텍스트가 있는 데이터베이스가 있다고 가정해 보겠습니다. 예를 들어 체코어-영어 사전 항목 표가 있습니다. 이제 다음이 있다고 가정합니다.연결사례con이 데이터베이스에 연결하면 이를 사용하여 Latin-2 인코딩된 텍스트를 디코딩할 수 있습니다.텍스트 팩토리:

con.text_factory = lambda data: str(data, encoding="latin2")

잘못된 UTF-8 또는 임의의 데이터가 저장된 경우TEXT테이블 열의 경우 다음 기술을 사용할 수 있습니다.유니코드 HOWTO:

con.text_factory = lambda data: str(data, errors="surrogateescape")

메모

그만큼sqlite3모듈 API는 서로게이트를 포함하는 문자열을 지원하지 않습니다.

또한보십시오

유니코드 HOWTO

설명

거래 제어

sqlite3데이터베이스 트랜잭션을 열고 닫을지 여부, 시기, 방법을 제어하는 ​​여러 가지 방법을 제공합니다.autocommit 속성을 통한 트랜잭션 제어권장되는 반면,isolated_level 속성을 통한 트랜잭션 제어Python 3.12 이전의 동작을 유지합니다.

다음을 통한 거래 제어autocommit기인하다

거래 행동을 제어하는 ​​권장 방법은 다음과 같습니다.연결.자동 커밋속성은 다음 방법을 사용하여 설정하는 것이 좋습니다.자동 커밋매개변수연결하다().

설정하는 것이 좋습니다자동 커밋에게False, 이는 다음을 의미합니다.PEP 249-규정을 준수하는 거래 제어. 이는 다음을 의미합니다.

  • sqlite3거래가 항상 열려 있도록 보장합니다.연결하다()연결.커밋(), 그리고연결.롤백()마지막 두 개의 트랜잭션은 보류 중인 트랜잭션을 닫은 직후에 암묵적으로 새로운 트랜잭션을 엽니다.sqlite3사용하다BEGIN DEFERRED거래를 시작할 때의 명세서.

  • 거래는 명시적으로 다음을 사용하여 커밋해야 합니다.commit().

  • 거래는 명시적으로 다음을 사용하여 롤백해야 합니다.rollback().

  • 데이터베이스가 다음과 같은 경우 암묵적 롤백이 수행됩니다.닫다()- 보류 중인 변경 사항이 있음.

세트자동 커밋에게TrueSQLite를 활성화하려면자동 커밋 모드. 이 모드에서는연결.커밋()그리고연결.롤백()효과가 없습니다. SQLite의 자동 커밋 모드는 다음과 다릅니다.PEP 249-준수연결.자동 커밋속성; 사용연결 중_거래저수준 SQLite 자동 커밋 모드를 쿼리합니다.

세트자동 커밋에게레거시_트랜잭션_제어거래 제어 동작을 다음 사람에게 맡기십시오.연결.격리_수준속성. 참조isolated_level 속성을 통한 트랜잭션 제어자세한 내용은.

다음을 통한 거래 제어isolation_level기인하다

메모

거래를 제어하는 ​​권장 방법은 다음과 같습니다.자동 커밋속성. 참조autocommit 속성을 통한 트랜잭션 제어.

만약에연결.자동 커밋로 설정되었습니다레거시_트랜잭션_제어(기본값), 거래 동작은 다음을 사용하여 제어됩니다.연결.격리_수준속성. 그렇지 않으면,isolation_level효과가 없습니다.

연결 속성의 경우격리 수준아니다None, 새로운 거래는 암묵적으로 시작됩니다.실행하다()그리고실행다수()실행한다INSERTUPDATEDELETE, 또는REPLACE문장; 다른 문장의 경우 암묵적 트랜잭션 처리가 수행되지 않습니다. 다음을 사용하십시오.저지르다()그리고롤백()보류 중인 트랜잭션을 각각 커밋하고 롤백하는 방법. 기본을 선택할 수 있습니다.SQLite 트랜잭션 동작— 즉, 어떤 유형인지 여부입니다.BEGIN진술sqlite3암묵적으로 실행 - 다음을 통해격리 수준기인하다.

만약에격리 수준로 설정되었습니다None, 어떠한 거래도 암묵적으로 열리지 않습니다. 이는 기본 SQLite 라이브러리를 그대로 둡니다.자동 커밋 모드, 하지만 사용자가 명시적 SQL 문을 사용하여 자신의 트랜잭션 처리를 수행할 수도 있습니다. 기본 SQLite 라이브러리 자동 커밋 모드는 다음을 사용하여 쿼리할 수 있습니다.거래중기인하다.

그만큼실행스크립트()이 방법은 값에 관계없이 지정된 SQL 스크립트를 실행하기 전에 보류 중인 모든 트랜잭션을 암묵적으로 커밋합니다.격리 수준.

버전 3.6에서 변경된 사항:sqlite3DDL 문 전에 암묵적으로 열린 트랜잭션을 커밋하는 데 사용됩니다. 더 이상 그렇지 않습니다.

버전 3.12에서 변경된 사항: 이제 거래를 제어하는 ​​권장 방법은 다음과 같습니다.자동 커밋기인하다.