를 사용하는 방법 sqlite3 모듈에서는 Python3

저자가 선택한 COVID-19 구호 기금을받을 기부의 일부로 쓰기 위한 기부 프로그램입니다.

소개

SQLite 는 자체 포함 된 파일 기반 SQL 데이터베이스입니다. SQLite 는 Python 과 함께 번들로 제공되며 추가 소프트웨어를 설치하지 않고도 Python 응용 프로그램 중 하나에서 사용할 수 있습니다.

이 튜토리얼에서는 Python3 의sqlite3모듈을 살펴 보겠습니다., 우리는 연결을 만들 SQLite 데이터베이스에 테이블을 추가하는 데이터베이스에 데이터를 삽입하는 테이블에서 데이터를 읽고 수정할 수 있는 테이블.

이 튜토리얼에서는 물고기가 가상의 수족관에 추가되거나 제거 될 때 수정해야하는 물고기의 인벤토리로 주로 작업 할 것입니다.

전제 조건

이 자습서를 최대한 활용하려면 Python 의 프로그래밍과 SQL 의 기본 배경에 익숙해지는 것이 좋습니다.,

을 검토할 수 있습니다 이러한 자를 위해 필요한 배경 정보:

  • 코딩하는 방법에 Python3
  • 소개하는 쿼리에서 MySQL

1 단계—연결을 만들 SQLite 데이터베이스

연결할 때 우리는 SQLite 데이터베이스,우리는 데이터에 액세스하는 궁극적으로 거주하는 파일에 우리의 컴퓨터입니다. SQLite 데이터베이스는 다양한 용도로 사용할 수있는 완벽한 기능을 갖춘 SQL 엔진입니다. 당분간,우리는 가상의 수족관에서 물고기의 재고를 추적하는 데이터베이스를 고려할 것입니다.,

우리는 연결할 수 있 SQLite 데이터베이스를 사용하는 파이썬sqlite3모듈:

import sqlite3connection = sqlite3.connect("aquarium.db")

import sqlite3게 우리의 Python 프로그램에 액세스 할 수 있습니다sqlite3모듈이 있습니다. sqlite3.connect()기능을 반환하는Connection개체는 우리가 사용하는 것과 상호 작용하는 SQLite 데이터베이스에서 개최된 파일의aquarium.db. aquarium.db파일을 만들에 의해 자동으로sqlite3.connect()경우aquarium.db에 이미 존재 하지 않는지 우리의 컴퓨터입니다.,

지 확인할 수 있습니다 우리는 성공적으로 만들어진 우리connection체에 의해 실행:

print(connection.total_changes)

경우에 우리는 실행이 Python 코드,우리는 출력이 표시됩니다 다음과 같:

Output
0

connection.total_changes은 총 수의 데이터베이스는 행에 의해 변경되었을connection. 아직 SQL 명령을 실행하지 않았기 때문에 0total_changes가 정확합니다.

언제든지이 자습서를 다시 시작하고 싶다는 것을 알게되면 컴퓨터에서aquarium.db파일을 삭제할 수 있습니다.,

참고:그것은 또한 연결이 가능하여 SQLite 있는 데이터베이스에서 엄격히 메모리는(그리고 파일)를 전달하여 특별한 문자열":memory:"intosqlite3.connect(). 예를 들어sqlite3.connect(":memory:")입니다. A":memory:"Sqlite 데이터베이스는 파이썬 프로그램이 종료되는 즉시 사라집니다. 이것이 편리할 수 있습을 원하는 경우 샌드박스는 임시 시도해 무언가에서 SQLite 필요가 없이 지속되는 모든 데이터 후 프로그램을 종료됩니다.,

2 단계—추가 데이터를 SQLite 데이터베이스

이제는 우리가 연결되어 있는aquarium.dbSQLite 데이터베이스를 삽입을 시작할 수 있습과 데이터를 읽습니다.

SQL 데이터베이스에서 데이터는 테이블에 저장됩니다. 테이블은 열 집합을 정의하고 정의된 각 열에 대한 데이터가 있는 0 개 이상의 행을 포함합니다., 테이블의 명명된fish는 다음과 같은 데이터:

이름 tank_number
새 미 1
Jamie 오징어 7

fish테이블 것이 추적 가치에 대한name,species,andtank_number각 물고기에서는 수족관도 있습니다., Two example fish rows are listed: one row for a shark named Sammy, and one row for a cuttlefish named Jamie.

We can create this fish table in SQLite using the connection we made in Step 1:

cursor = connection.cursor()cursor.execute("CREATE TABLE fish (name TEXT, species TEXT, tank_number INTEGER)")

connection.cursor() returns a Cursor object. Cursor objects allow us to send SQL statements to a SQLite database using cursor.execute()., "CREATE TABLE fish ..."문자열은 SQL 문을 만들어 테이블 라는fish가진 세 개의 열 앞에서 설명:name의 유형TEXT,종의 형식TEXT, 그리고tank_number의 유형INTEGER.,

이제는 우리가 만든 테이블,우리는 삽입할 수 있는 데이터 행니다.

cursor.execute("INSERT INTO fish VALUES ('Sammy', 'shark', 1)")cursor.execute("INSERT INTO fish VALUES ('Jamie', 'cuttlefish', 7)")

우리는 전화cursor.execute()두 시간:면을 삽입하는 행에 대한 상어Sammy에서 탱크1, 면을 삽입하는 행에 대한 오징어가Jamie에서 탱크7. "INSERT INTO fish VALUES ..."는 테이블에 행을 추가 할 수있는 SQL 문입니다.,

다음 섹션에서,우리가 사용하는 SQLSELECT문을 검사하는 행 우리가 삽입되 우리fish테이블.

3 단계-SQLite 데이터베이스에서 데이터 읽기

2 단계에서는fish라는 SQLite 테이블에 두 개의 행을 추가했습니다., 검색할 수 있습니다 그는 행을 사용하여SELECTSQL statement:

rows = cursor.execute("SELECT name, species, tank_number FROM fish").fetchall()print(rows)

경우 우리는 이 코드를 실행합니다,우리는 볼 것 출력이 다음과 같습니다.

Output

cursor.execute()기능이 실행되는SELECT문의 값을 검색에 대한name,species, 그리고tank_numberfish테이블. fetchall()SELECT문의 모든 결과를 검색합니다., 우리는print(rows)때 우리는 두 튜플의 목록을 참조하십시오. 각 튜플에는 세 개의 항목이 있습니다.fish테이블에서 선택한 각 열에 대해 하나의 항목입니다. 두 개의 튜플는 데이터는 우리가 단계 2 에서 삽입한다:하나는 튜플한Sammyshark고,하나를 위해 튜플Jamiecuttlefish.,

경우 우리가 원하는 행을 검색하는fish테이블과 일치하는 특정 기준의 설정,우리가 사용할 수 있는WHERE절:

경우에 우리는 실행이,우리는 볼 것 출력이 다음과 같습니다.

Output

으로 이전를 들어, cursor.execute(<SQL statement>).fetchall()할 수 있 미국을 가져오는 모든 결과의SELECT문입니다. WHERESELECT문을 필터에 대한 행 값의nametarget_fish_name., 지 우리가 사용하는?대체의target_fish_name로 변수를SELECT문입니다. 우리가 기대하만과 일치 하나의 행,그리고 실제로 우리만의 행Jamiecuttlefish반환됩니다.

경고:파이썬 문자열 연산을 사용하여 sql 문 문자열을 동적으로 생성하지 마십시오. 파이썬 문자열 연산을 사용하여 SQL 문 문자열을 어셈블하면 SQL 주입 공격에 취약합니다. Sql 주입 공격을 사용하여 데이터베이스에 저장된 데이터를 도용,변경 또는 수정할 수 있습니다., Sql 문에서 항상?자리 표시자를 사용하여 파이썬 프로그램의 값을 동적으로 대체하십시오. 두 번째 인수로 값의 튜플을Cursor.execute()에 전달하여 값을 SQL 문에 바인딩합니다. 이 대체 패턴은 여기뿐만 아니라이 튜토리얼의 다른 부분에서도 시연됩니다.

4 단계—데이터 수정에서 SQLite 데이터베이스

행 SQLite 데이터베이스를 사용하여 수정할 수 있습니다UPDATEDELETESQL 문을 수행합니다.,

예를 들어 새미 상어가 탱크 번호 2 로 이동했다고 가정 해 봅시다. 우리는 우리를 변경할 수 있습 새미의 행fish테이블이 변화를 반영:

우리는 문제는UPDATESQL 문을 변경하는tank_numberSammy새로운 가치의2. WHEREUPDATE문 우리의 값만 변경tank_number경우 행name = "Sammy".,

경우에 우리는 실행하는 다음과 같은SELECT성명,우리는 확인할 수 있습니다 우리의 업데이트가 올바르게 만든다.

rows = cursor.execute("SELECT name, species, tank_number FROM fish").fetchall()print(rows)

경우에 우리는 실행이,우리는 볼 것 출력이 다음과 같습니다.

Output

주는 행Sammy이제는 가치의2tank_number컬럼입니다.

새미 상어가 야생으로 풀려나 더 이상 수족관에 의해 개최되지 않는다고 가정 해 봅시다., 이후 새미는 더 이상 생활에서 수족관,이해를 제거하는Sammy에서 행fish테이블.

문제는DELETESQL 문을 제거하는 행

released_fish_name = "Sammy"cursor.execute( "DELETE FROM fish WHERE name = ?", (released_fish_name,))

우리는 문제를DELETESQL 문을 제거하는 행Sammyshark. WHEREDELETE문 우리만 삭제하는 경우 행하는 행name = "Sammy".,

경우에 우리는 실행하는 다음과 같은SELECT성명,우리는 확인할 수 있습니다 우리의 삭제를 제대로 만들어졌다.

rows = cursor.execute("SELECT name, species, tank_number FROM fish").fetchall()print(rows)

경우 우리는 이 코드를 실행합니다,우리는 볼 것 출력이 다음과 같습니다.

Output

주는 행Sammyshark은 지금 사라지고,만Jamiecuttlefish남아 있습니다.,

5 단계—를 사용하여 문장을 위한 자동적인 정

이 튜토리얼에서,우리가 사용하는 두 가지 기본체와 상호 작용하는"aquarium.db"SQLite 데이터베이스Connection체는connection, 고Cursor체는cursor.

에서 같은 방법으로는 파이썬 파일을 닫아야 할 때 우리는 작업을 수행,그들과 함께ConnectionCursor체를 또한 폐쇄 될 때 그들은 더 이상 필요하지 않습니다.,

우리가 사용할 수 있는with문 우리를 도와 자동으로 닫히ConnectionCursor개체:

closing은 편리한 기능에 의해 제공됩contextlib모듈이 있습니다. 면with문구,closing는 것을 보장close()호출에 무엇이든 개체가 전달됩니다. 이 예에서는closing함수가 두 번 사용됩니다., 한 번도록 하는Connection개체 반환에 의해sqlite3.connect()은 자동으로 닫히며,두 번째는지 확인하는 시간Cursor개체 반환에 의해connection.cursor()은 자동으로 종료됩니다.,

경우 우리는 이 코드를 실행합니다,우리는 볼 것 출력이 다음과 같습니다.

Output

이후"SELECT 1"SQL 문을 항상 반환하는 단 하나 줄을 가진 하나의 열의 값으로1, 그것은 단순한 튜플1으로만 반환되는 값으로 우리의 코드입니다.

결론

sqlite3모듈은 강력한 부분의 Python 표준 라이브러리,그것 있습니다 우리는 작업으로 완벽한 기능을 갖춘 디스크에 있는 SQL 데이터베이스를 설치하지 않고 추가적인 소프트웨어입니다.,

이 튜토리얼에서,우리가 사용하는 방법을 배웠sqlite3모듈에 연결하 SQLite 데이터베이스,데이터 추가 데이터베이스,뿐만 아니라 읽고 수정하는 데이터에서는 데이터베이스입니다. 길을 따라 우리는 또한 것을 배웠의 위험에 대한 SQL injection 공격과 방법을 사용하는contextlib.closing자동화close()Python 체에서with문입니다.

여기에서 Sqlite vs MySQL vs PostgreSQL:관계형 데이터베이스 관리 시스템의 비교에서 SQL 데이터베이스에 대해 자세히 알아볼 수 있습니다.피>

답글 남기기

이메일 주소를 발행하지 않을 것입니다. 필수 항목은 *(으)로 표시합니다

도구 모음으로 건너뛰기