Python Flask SQLite 데이터베이스 설정

Beginner

This tutorial is from open-source community. Access the source code

소개

이 랩에서는 Python Flask 프레임워크를 사용하여 SQLite 데이터베이스를 정의하고 액세스하는 방법을 배웁니다. SQLite 데이터베이스를 설정하고, 연결을 설정하며, 테이블을 생성하고, 데이터베이스를 초기화합니다.

참고: 코드 파일을 직접 생성하고 환경에서 실행해야 합니다. Web 5000 에서 Flask 서비스 상태를 미리 볼 수 있습니다.

데이터베이스 설정

먼저, 사용자 및 게시물을 저장하기 위해 SQLite 데이터베이스를 설정해야 합니다. SQLite 는 별도의 데이터베이스 서버가 필요 없고 Python 에 내장되어 있어 편리한 선택입니다.

Flask 애플리케이션에서 SQLite 데이터베이스에 대한 연결을 생성합니다. 이 연결은 일반적으로 웹 애플리케이션에서 요청에 연결되며, 작업이 완료된 후 닫힙니다.

연결은 sqlite3.connect 함수를 사용하여 설정하며, Flask 의 특수 객체 g를 사용하여 연결을 저장하고 재사용합니다.

새로운 Python 파일 db.py를 생성하고 다음 코드를 추가합니다.

## flaskr/db.py

import sqlite3
from flask import current_app, g

def get_db():
    ## Check if 'db' is not in 'g'
    if 'db' not in g:
        ## Establish a connection to the database
        g.db = sqlite3.connect(
            current_app.config['DATABASE'],
            detect_types=sqlite3.PARSE_DECLTYPES
        )
        ## Return rows that behave like dicts
        g.db.row_factory = sqlite3.Row

    return g.db

def close_db(e=None):
    ## Pop 'db' from 'g' and close the connection if it exists
    db = g.pop('db', None)

    if db is not None:
        db.close()

테이블 생성

SQLite 에서 데이터는 테이블과 열에 저장됩니다. 데이터를 저장하고 검색하기 전에 이러한 테이블과 열을 생성해야 합니다. 우리 애플리케이션은 사용자를 user 테이블에, 게시물을 post 테이블에 저장합니다.

새로운 SQL 파일 schema.sql을 생성하고 다음 코드를 추가합니다.

## flaskr/schema.sql

DROP TABLE IF EXISTS user;
DROP TABLE IF EXISTS post;

CREATE TABLE user (
  id INTEGER PRIMARY KEY AUTOINCREMENT,
  username TEXT UNIQUE NOT NULL,
  password TEXT NOT NULL
);

CREATE TABLE post (
  id INTEGER PRIMARY KEY AUTOINCREMENT,
  author_id INTEGER NOT NULL,
  created TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
  title TEXT NOT NULL,
  body TEXT NOT NULL,
  FOREIGN KEY (author_id) REFERENCES user (id)
);

데이터베이스 초기화

다음으로, 테이블을 생성하기 위해 SQL 명령을 실행하는 Python 함수를 추가합니다. 다음 함수를 db.py 파일에 추가합니다.

## flaskr/db.py

def init_db():
    db = get_db()

    with current_app.open_resource('schema.sql') as f:
        db.executescript(f.read().decode('utf8'))

@click.command('init-db')
def init_db_command():
    """Clear the existing data and create new tables."""
    init_db()
    click.echo('Initialized the database.')

애플리케이션에 등록

close_dbinit_db_command 함수는 애플리케이션에서 사용하기 위해 애플리케이션 인스턴스에 등록되어야 합니다. 팩토리 함수를 사용하고 있으므로, 애플리케이션을 인수로 받아 등록을 수행하는 함수를 작성합니다.

다음 함수를 db.py 파일에 추가합니다.

## flaskr/db.py

def init_app(app):
    app.teardown_appcontext(close_db)
    app.cli.add_command(init_db_command)

그런 다음, 팩토리에서 이 함수를 가져와 호출합니다. 다음 코드를 __init__.py 파일에 추가합니다.

## flaskr/__init__.py

def create_app():
    app = ...
    ## existing code omitted

    from . import db
    db.init_app(app)

    return app

데이터베이스 파일 초기화

이제 init-db가 앱에 등록되었으므로 flask 명령을 사용하여 호출할 수 있습니다.

init-db 명령을 실행합니다.

flask --app flaskr init-db
Initialized the database.

요약

이 랩에서는 Python Flask 프레임워크를 사용하여 SQLite 데이터베이스를 정의하고 액세스하는 방법을 배웠습니다. 데이터베이스에 연결하고, 테이블을 생성하고, 데이터베이스를 초기화했습니다. 이는 데이터베이스에서 데이터를 저장하고 검색해야 하는 모든 웹 애플리케이션의 기본입니다.