소개

이 튜토리얼에서 커버를 사용하여 SQLite 과 조합의 sqlite3 인터페이스입니다. SQLite 는 대부분의 표준 Python 설치와 함께 번들로 제공되는 단일 파일 관계형 데이터베이스입니다. SQLite 은 종종 기술에 대한 선택의 작은 응용 프로그램,특히 그들의 임베디드 시스템과 장치와 같은 휴대폰과 태블릿,스마트 가전 제품,그리고 악기입니다. 그러나 중소 웹 및 데스크톱 응용 프로그램에 사용되는 것을 듣는 것은 드문 일이 아닙니다.,

데이터베이스를 만들의 연결을 만들기

새로 만드는 SQLite 데이터베이스를 만드는 것만 큼 간단한 연결을 사용하여 sqlite3 모듈에서는 파이썬 표준 라이브러리입니다. 연결을 설정하고 당신이해야 할 모든 당신이 통과하는 파일의 경로를connect(...)방법에 sqlite3 모듈을 경우 나타내는 데이터베이스 파일에 의해가 존재하지 않습 중 하나에서 만들어집하는 경로입니다.,

import sqlite3con = sqlite3.connect('/path/to/file/db.sqlite3')

을 찾을 수 있는 일상에서 데이터베이스 프로그래밍을 지속적으로 만드는 연결을 데이터베이스,그래서 그것은 좋은 생각하는 포장이 간단한 연결은 문으로 재사용할 수 있는 일반화된 기능이다.

테이블 만들기

을 만들기 위해서는 데이터베이스 테이블이 필요하신의 아이디어 데이터의 구조에 관심이 있은 후 보관하십시오. 많은 설계 고려 사항으로 정의하는 테이블의 관계형 데이터베이스 전체에 책에 대한 작성되었습니다., 나는이 연습의 세부 사항으로 가지 않을 것이고 대신 그것을 더 조사하기 위해 독자에게 맡길 것이다.

그러나,원조에서 우리의 토론의 SQLite 데이터베이스 프로그래밍 파이썬으로 나는 일하게 될 것이 전제하는 데이터베이스를 만들어야 할 대한 가상의 책을 저장하는 아래의 이미 수집된 데이터에 책을 판매합니다.,

customer date product price
Alan Turing 2/22/1944 Introduction to Combinatorics 7.99
Donald Knuth 7/3/1967 A Guide to Writing Short Stories 17.99
Donald Knuth 7/3/1967 Data Structures and Algorithms 11.99
Edgar Codd 1/12/1969 Advanced Set Theory 16.,99

검사 이 데이터를 분명한 것은 포함하에 대한 정보를 고객,제품,및 주문입니다. 일반적인 패턴에서 데이터베이스 디자인 트랜잭션 시스템의 이 유형은 휴식을 주문 두 가지로 추가적인 테이블,주문 및 배송 항목(때로는 주문 정보)을 강화하고 달성하기 위해 정규화.

파이썬 인터프리터에서 db_utils 와 같은 디렉토리에 있습니다.,py 모듈 정의 이전에 입력하여 데이터베이스를 만드는 고객 제품의 테이블 다음과 같다.

위의 코드는 연결을 생성 개체를 사용하여 인스턴스화 커서를 개체입니다. 커서 개체는 SQLite 데이터베이스에서 SQL 문을 실행하는 데 사용됩니다.

커서 만들어 나는 다음을 썼 SQL 를 만드는 고객 테이블의 제공,그것은 기본 열쇠와 함께 첫 번째와 마지막 이름의 텍스트 필드에 할당하는 변수라는customers_sql., 그런 다음 커서 객체의execute(...)메서드를 호출하여customers_sql변수를 전달합니다. 그런 다음 비슷한 방식으로 제품 테이블을 만듭니다.

내장 SQLite 메타 데이터 테이블 인sqlite_master테이블을 쿼리하여 위의 명령이 성공했는지 확인할 수 있습니다.

모든 테이블을 참조하십시오에서는 현재 연결된 데이터베이스 쿼리namecolumnsqlite_master테이블의type과 동일하다”표”입니다.,

를 살펴보의 스키마 테이블을 쿼리sql열 같은 테이블의는type은 여전히””테이블 그리고name은 동일하”고객”또는”제품”.

정의 할 다음 테이블은 외래 키와 구매 날짜를 통해 고객을 주문에 연결하는 주문 테이블입니다. 이후 SQLite 지원하지 않는 실제적인 날짜/시간 데이터 입력(또는 데이터의 수와 일치 SQLite 특유의)모든 날짜 표시될 텍스트로 값입니다.,

정의 할 최종 테이블은 각 주문의 제품에 대한 자세한 회계를 제공하는 광고 항목 테이블이 될 것입니다.

데이터로드

이 섹션에서는 샘플 데이터를 방금 만든 테이블에 삽입하는 방법을 보여줍니다. 천연 시작하는 것을 채우 제품 표기 때문에 먼저 제품 없이 우리가 할 수 없는 판매고,따라서이 없는 것 외에 열쇠와 관련 품목이 있습니다., 샘플 데이터가 보이 있다는 네 개의 제품:

워크플로우를 실행하기 위한 INSERT 문은 단순히

  1. 데이터베이스에 연결
  2. 커서를 만들 개체
  3. 쓰기 매개 변수가 있는 insert SQL 문을 저장할 변수로
  4. 호출에 실행 방법에 커서 객체에 전달하는 sql 변수의 값으로 tuple, 을 삽입할 수 있는 테이블

이 일반적인 개요를 작성하자 더 코드입니다.,

위의 코드는 아마도 꽤 분명한 것 같지만,나에게 그것을 논의하는 비트가 같은 몇 가지 중요한 것입니다. Insert 문은?비트를 제외한 표준 SQL 구문을 따릅니다. ?는 실제로”매개 변수화 된 쿼리”로 알려진 자리 표시 자입니다.

쿼리에는 중요한 기능의 본질적으로 모든 데이터베이스 인터페이스 현대 높은 수준의 프로그래밍 언어와 같은 sqlite3 모듈에서는 Python., 이러한 유형의 쿼리는 여러 번 반복되는 쿼리의 효율성을 향상시키는 역할을합니다. 아마도 더 중요한 것,그들은 또한 살균력을 가지는 장소의?자리 표시자로 전달되는 동안 호출에 실행 방법의 사용을 방지하는 사악한 입력을 선도하는 SQL injection. 다음은 인기에서 만화입니다 xkcd.com sql 주입의 위험을 설명하는 블로그.

을 채우는의 나머지 테이블은 우리가 따라 약간 다른 패턴을 변경하는 것을 더 높이 올라갈 수 있습니다., 에 대한 워크플로,각각의 순서 확인된 조합하여 고객의 첫 번째와 마지막 이름 및 구매일이 될 것입니다:

  1. 삽입하는 새로운 고객으로 고객 테이블에 검색하고 그 기본 키 id
  2. 만들기 위해 진입을 기반으로 고객의 id 및 구매 날짜를 검색하는 기본 키 id
  3. 에서 각 제품에 대한 순서를 결정하는 기본 키의 id 및 라인을 만들 항목을 입력을 연결하기 위해 제품

하는 것을 간단에 자신을 우리가 빠른 모습까지의 모든 우리의 제품입니다., 지금은 우리가 곧 그것에 섹션을 바칠 것 같은 SELECT SQL 문의 역학에 대해 너무 걱정하지 마십시오.

첫 번째 주문은 1944 년 2 월 22 일 앨런 튜링(Alan Turing)에 의해 7.99 달러에 조합론 소개(Introduction to Combinatorics)를 구입했습니다.

만들기 시작하여 새로운 고객의 레코드에 대한 Mr.Turing 그 결정의 기본 키 id 에 액세스하여lastrowid분야의 커서를 개체입니다.

이제 주문 항목을 만들고 새 주문 id 값을 수집하여 Turing 이 주문한 제품과 함께 광고 항목 항목에 연결할 수 있습니다.,

나머지 레코드는 두 개의 광고 항목 항목을 받게됩니다 도널드 Knuth 에 만든 순서를 제외하고 정확히 동일한로드됩니다. 그러나 이러한 작업의 반복적 인 특성은 이러한 기능을 재사용 가능한 기능으로 래핑 할 필요성을 외치고 있습니다. 에서 db_utils.py 모듈 추가 다음 코드:

Awh,지금 우리는 작업 일부 효율!

해야 합니다exit()Python 인터프리터를 다시 로드하는 새로운 기능이 될에서 액세스할 수 있는 인터프리터입니다.,

나는 소프트웨어 장인 정신의 학생으로서 한 가지 추가 조언을 제공 할 것을 강요 당한다. 을 때 자신을 찾고 여러 데이터베이스를 조작(삽입 이 경우)을 달성하기 위해서는 실제로 무엇을 하나의 누적 작업(ie,을 만들기 위해)그것은 최고의 포장 작업(생성,고객기 위해,다음 항목)단일 데이터베이스로 거래할 수 있도록 적에 성공 또는 롤백하면 오류가 발생합니다.,데이터베이스에서 기존 레코드를 업데이트하는 방법에 대한 빠른 데모로이 섹션을 끝내고 싶습니다. 단편 소설의 가격을 쓰는 가이드를 10.99(판매 예정)로 업데이트 해 보겠습니다.

>>> update_sql = "UPDATE products SET price = ? WHERE id = ?">>> cur.execute(update_sql, (10.99, 2))

쿼리 데이터베이스

일반적으로 가장 일반적인 액션에서 수행되는 데이터베이스 검색의 일부에 저장된 데이터를 통해 선택한 문입니다. 이 섹션에서는 sqlite3 인터페이스를 사용하여 간단한 선택 쿼리를 수행하는 방법을 보여줍니다.,

customers 테이블의 기본 multirow 쿼리를 수행하려면 select 문을 커서 개체의execute(...)메서드에 전달합니다. 이 후 동일한 커서 개체의fetchall()메서드를 호출하여 쿼리 결과를 반복 할 수 있습니다.

대신 데이터베이스에서 하나의 레코드 만 검색하고 싶다고 가정 해 보겠습니다. Donald Knuth 의 id2 에 대해 더 구체적인 쿼리를 작성하고 커서 객체의fetchone()메소드를 호출하여이를 수행 할 수 있습니다.,

>>> cur.execute("SELECT id, first_name, last_name FROM customers WHERE id = 2")>>> result = cur.fetchone()>>> print(result)(2, 'Donald', 'Knuth')

각 결과의 개별 행이 튜플 형태 인 방법을 참조하십시오. 라는 튜플은 매우 유용한 Pythonic 데이터 구조에 대한 일부를 프로그래밍에 사용할 경우 많은 사람들이 그들에게 조금 방해 올 때 작업의 데이터를 불러올 수 있습니다. 그것은 단지 그렇게 아마도 일부보다 유연한 방식으로 데이터를 표현하는 방법이 있다는 것을 발생합니다. 당신이해야 할 모든 당신이 설정row_factory의 방법을 연결 객체가 더 적당 같은sqlite3.Row., 이렇게 당신은에 액세스 할 수있는 기능을 개별 항목의 행에 의 위치 또는 키워드는 값입니다.

결론

이 문서에서 나는 대한 간략한 시범의 가장 중요하다고 생각되는 기능과 기능의 sqlite3Python 인터페이스 라는 단일 파일 SQLite 데이터베이스는 사전에 번들로 대부분의 파이썬 설치합니다., 내가 제공하기 위해 노력의 조언에 대한 최고의 관행을 때 데이터베이스 프로그래밍지만,나는 주의 새로 띄는 것의 복잡한 데이터베이스 프로그래밍은 일반적으로 가장하는 경향이 구멍 보안에 엔터프라이즈 수준과 추가 지기 전에 필요한 사업이다.피>