flaskとsqlite3の接続


はじめに

Flaskを使用して1からアプリケーションを作り、必要な技術を学んでいただけるようにまとめています。

databaseにアクセス

データベースのインストール・設定

今回はSQLiteを使用します。
※ macの方はデフォルトでインストールされています。
※ windowsの方はこちらからインストールしてください。
また、設定はこちらを参照して行ってください。

  • インストール確認
$ sqlite3 -version
3.28.0 ...

また、今回使用するORM(Object Relational Mapper)のインストールを行います。

  • SQLAlchemyのインストール
# mac
$ pip3 install Flask-SQLAlchemy

# windows
$ pip install Flask-SQLAlchemy
  • 初期設定
src/__init__.py
from flask import Flask
from flask_sqlalchemy import SQLAlchemy

app = Flask(__name__)
app.config["SECRET_KEY"] = b'_5#y2L"F4Q8z\n\xec]dasfe/'
app.config["SQLALCHEMY_DATABASE_URI"] = 'sqlite:///flask_blog.db'
app.config["SQLALCHEMY_TRACK_MODIFICATIONS"] = True

db = SQLAlchemy(app)

import src.views

モデルの定義

今回作成するのはブログなので、タイトル・本文があり、投稿日時もデータベースで管理します。
新たにsrcディレクトリに"models"を作成し、"entires.py"を作成します。

src/models/entry.py
from src import db
from datetime import datetime


class Entry(db.Model):
    __tablename__ = 'entries'
    id = db.Column(db.Integer, primary_key=True)
    title = db.Column(db.String(50), unique=True)
    text = db.Column(db.Text)
    create_at = db.Column(db.DateTime)

    def __init__(self, title=None, text=None):
        self.title = title
        self.text = text
        self.create_at = datetime.now()

スクリプトで共通処理の実行

最後にモデルで定義した内容をデータベースに反映させます。
データベースへの反応は以下の二つがあります。
* コンソールでの実行
* スクリプトでの実行

今回はスクリプトでの実行を紹介します。(こちらはミスが起こりにくく実際の開発環境でよく使用されています。)

まず、スクリプトを実行するのに必要なライブラリをインストールします。

# mac
$ pip3 install Flask-Script

# windows
$ pip install Flask-Script

実際のスクリプトは以下になります。

manage.py
import sys
sys.dont_write_bytecode = True

from flask_script import Command
from flask_script import Manager

from src import app
from src import db

class InitDB(Command):
    def run(self):
        db.create_all()

if __name__ == '__main__':
    m = Manager(app)
    m.add_command('init_db', InitDB())
    m.run()

作成したスクリプトファイルを実行します。

# mac 
$ python3 manage.py init_db

# windows
$ python manage.py init_db

実行後'src'ディレクトリに'flask_blog.db'というファイルが作成されていることを確認できるはずです。