소개
이 튜토리얼에서 커버를 사용하여 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
테이블을 쿼리하여 위의 명령이 성공했는지 확인할 수 있습니다.
모든 테이블을 참조하십시오에서는 현재 연결된 데이터베이스 쿼리name
columnsqlite_master
테이블의type
과 동일하다”표”입니다.,
를 살펴보의 스키마 테이블을 쿼리sql
열 같은 테이블의는type
은 여전히””테이블 그리고name
은 동일하”고객”또는”제품”.
정의 할 다음 테이블은 외래 키와 구매 날짜를 통해 고객을 주문에 연결하는 주문 테이블입니다. 이후 SQLite 지원하지 않는 실제적인 날짜/시간 데이터 입력(또는 데이터의 수와 일치 SQLite 특유의)모든 날짜 표시될 텍스트로 값입니다.,
정의 할 최종 테이블은 각 주문의 제품에 대한 자세한 회계를 제공하는 광고 항목 테이블이 될 것입니다.
데이터로드
이 섹션에서는 샘플 데이터를 방금 만든 테이블에 삽입하는 방법을 보여줍니다. 천연 시작하는 것을 채우 제품 표기 때문에 먼저 제품 없이 우리가 할 수 없는 판매고,따라서이 없는 것 외에 열쇠와 관련 품목이 있습니다., 샘플 데이터가 보이 있다는 네 개의 제품:
워크플로우를 실행하기 위한 INSERT 문은 단순히
- 데이터베이스에 연결
- 커서를 만들 개체
- 쓰기 매개 변수가 있는 insert SQL 문을 저장할 변수로
- 호출에 실행 방법에 커서 객체에 전달하는 sql 변수의 값으로 tuple, 을 삽입할 수 있는 테이블
이 일반적인 개요를 작성하자 더 코드입니다.,
위의 코드는 아마도 꽤 분명한 것 같지만,나에게 그것을 논의하는 비트가 같은 몇 가지 중요한 것입니다. Insert 문은?
비트를 제외한 표준 SQL 구문을 따릅니다. ?
는 실제로”매개 변수화 된 쿼리”로 알려진 자리 표시 자입니다.
쿼리에는 중요한 기능의 본질적으로 모든 데이터베이스 인터페이스 현대 높은 수준의 프로그래밍 언어와 같은 sqlite3 모듈에서는 Python., 이러한 유형의 쿼리는 여러 번 반복되는 쿼리의 효율성을 향상시키는 역할을합니다. 아마도 더 중요한 것,그들은 또한 살균력을 가지는 장소의?
자리 표시자로 전달되는 동안 호출에 실행 방법의 사용을 방지하는 사악한 입력을 선도하는 SQL injection. 다음은 인기에서 만화입니다 xkcd.com sql 주입의 위험을 설명하는 블로그.
을 채우는의 나머지 테이블은 우리가 따라 약간 다른 패턴을 변경하는 것을 더 높이 올라갈 수 있습니다., 에 대한 워크플로,각각의 순서 확인된 조합하여 고객의 첫 번째와 마지막 이름 및 구매일이 될 것입니다:
- 삽입하는 새로운 고객으로 고객 테이블에 검색하고 그 기본 키 id
- 만들기 위해 진입을 기반으로 고객의 id 및 구매 날짜를 검색하는 기본 키 id
- 에서 각 제품에 대한 순서를 결정하는 기본 키의 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 데이터베이스는 사전에 번들로 대부분의 파이썬 설치합니다., 내가 제공하기 위해 노력의 조언에 대한 최고의 관행을 때 데이터베이스 프로그래밍지만,나는 주의 새로 띄는 것의 복잡한 데이터베이스 프로그래밍은 일반적으로 가장하는 경향이 구멍 보안에 엔터프라이즈 수준과 추가 지기 전에 필요한 사업이다.피>