Re:ゼロから始める文系プログラマ

未経験がプログラミングを通して人生を変える

【Flask】電子掲示板を作る~③電子掲示板のデータベースを構築する~


スポンサードリンク
 

f:id:ShotaNukumizu_1000:20210718062603p:plain

おはようございます。Shotaです。

今日は昨日に引き続き、PythonのFlaskを用いた簡単なWebアプリの作り方について解説していきます。

今日の記事では、電子掲示板のデータベースを構築する方法について解説します。



データベースを作る

電子掲示板に投稿した内容をたくさん保存するため、データベースを用意しておきましょう。今回作る電子掲示板では、次のようなデータを作っておきたいと思います。

  • id:投稿したデータを識別するために必要。整数で表現される。
  • user:投稿者の名前。
  • title:投稿する情報のタイトル。
  • detail:投稿する情報。
  • post_date:投稿した日付。


主に上記の項目を中心にデータベースを作っていこうと思います。

また、データベースには様々な種類がありますが、今回はSQLiteを使います。(SQLiteに関しては、また後日詳細に解説していきます。)

それでは、実際にプログラムを書いてデータベースを作っていきましょう。


Pythonファイル

まず最初に、「main.py」を以下のコードに書き換えてください。

from flask import Flask, render_template
from flask_sqlalchemy import SQLAlchemy

app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///postdata.db'
db = SQLAlchemy(app)

@app.route('/')
def index():
    return render_template('index.html')

if __name__ == '__main__':
    app.run(debug=True)

コードを増やした部分だけピックアップすると、以下のとおりです。

from flask_sqlalchemy import SQLAlchemy

app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///postdata.db'
db = SQLAlchemy(app)

このflask_sqlalchemyは、Flaskと一緒にインストールしておいたライブラリです。これを使うと、Pythonオブジェクトのようにデータベースを簡単に扱うことができます。

実際に、データベースに追加する項目を定義していきましょう。以下のコードを「main.py」に追加します。

class Post(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    user = db.Column(db.String(20), nullable=False)
    title = db.Column(db.String(30), nullable=False)
    detail = db.Column(db.Text, nullable=False)
    post_date = db.Column(db.DateTime, nullable=False)

Pythonファイル「main.py」の全体像は以下の通りになります。

from flask import Flask, render_template
from flask_sqlalchemy import SQLAlchemy

app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///postdata.db'
db = SQLAlchemy(app)

class Post(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    user = db.Column(db.String(20), nullable=False)
    title = db.Column(db.String(30), nullable=False)
    detail = db.Column(db.Text, nullable=False)
    post_date = db.Column(db.DateTime, nullable=False)

@app.route('/')
def index():
    return render_template('index.html')

if __name__ == '__main__':
    app.run(debug=True)


プログラムの説明

それでは、今日の記事で紹介したプログラムを詳細に説明していきましょう。


データベースのURI設定

app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///postdata.db'
db = SQLAlchemy(app)

このように書くことで、postdata.dbという名前のデータベースを作っています。その後で、SQLAlchemyクラスに変数appを入れて、変数dbに格納していきます。


データベースの項目定義

class Post(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    user = db.Column(db.String(20), nullable=False)
    title = db.Column(db.String(30), nullable=False)
    detail = db.Column(db.Text, nullable=False)
    post_date = db.Column(db.DateTime, nullable=False)

データベースで扱う項目は、Pythonのクラスオブジェクトで定義することができます。

それぞれの項目は、以下のように設定しました。(詳細は「python sqlite3」とググってください)

  • id:整数値で設定。
  • user:20文字以内の文字列で設定。空欄にできない。
  • title:30文字以内の文字列で設定。空欄にできない。
  • detail:テキスト形式の文字列で設定。空欄にできない。
  • post_date:日付型で設定。空欄にできない。


ここまで書けたら、今定義したデータベースを作成していきます。

VSCodeでターミナルを開いて、Python型の対話シェルを起動しましょう。ターミナルを開いたら、

python

この文字列を入力します。

そして、以下の順番に入力していきます。

from main import db
db.create_all()

このように入力すると、ターミナルに以下の文字列が出力されると思います。これが出力されたら無事にデータベースができたことを意味しています。

C:\Users\autho\anaconda3\lib\site-packages\flask_sqlalchemy\__init__.py:872: FSADeprecationWarning: SQLALCHEMY_TRACK_MODIFICATIONS adds significant overhead and will be disabled by default in the future.  Set it to True or False to suppress this warning.
  warnings.warn(FSADeprecationWarning(

これで無事にデータベースを作成できましたので、ターミナルを閉じます。


まとめ

今日の記事では電子掲示板のデータベースを構築する方法について徹底解説しました。

今日の記事でデータベースに関する内容について触れましたが、詳細は以下のWebサイトをご覧ください。(英語ですが、ブラウザの翻訳機能を利用してください)

www.sqlalchemy.org

今日の記事はこれで終了です。

【参考サイト】

tech-diary.net