☆☆ 新着記事 ☆☆

2019年4月15日月曜日

FLASK SQLAlchemy 基本のCRUDアプリ



まずは、基本のFlask/JinjaのPost Methodによるデータの受け渡しを以下のように作成し、
これをデータベース(Sqlite)に反映させるように、一つずつ加筆・修正していきます。



Flask/Jinja2 で htmlからPost Methodのデータを受け取る基本のアプリ。


app.py

from flask import Flask, render_template, redirect, request
app = Flask(__name__)
@app.route('/', methods=["GET", "POST"])
def home():
    if request.form:
        music = request.form['title']
    else:
        music = "Not yet entered"
    return render_template("music.html",music=music)
if __name__ == "__main__":
    app.run(debug=True)



templates/music.html

  <body>
    <form method="POST" action="/">
      <input type="text" name="title">
      <input type="submit" value="Add">
    </form>

<p>Now your inputs are as shown below</p>
{{music}}
  </body>
</html>

(スクリーン遷移イメージ)




*この記述の書き方を確認したい方は「Flask/Jinja2 GET/POST Method」にまとめてあります。





では、app.pyを以下のように変更します。

SQL Alchemyをインストールします。

# pip3 install --user flask sqlalchemy flask-sqlalchemy


次に、上記のファイルを、以下のように変更します

1) Create & Read





app.py

import os
from flask import Flask, render_template, redirect, request
from flask_sqlalchemy import SQLAlchemy

project_dir = os.path.dirname(os.path.abspath(__file__))
database_file = "sqlite:///{}".format(os.path.join(project_dir, "music.db"))

app = Flask(__name__)

app.config["SQLALCHEMY_DATABASE_URI"] = database_file

db = SQLAlchemy(app)

class Music(db.Model):

    title = db.Column(db.String(80), unique=True, nullable=False, primary_key=True)

    def __repr__(self):
        return "<Title: {}>".format(self.title)

@app.route('/', methods=["GET", "POST"])

def home():
    if request.form:
        music = Music(title=request.form.get("title"))
        db.session.add(music)  #データベースの作成と反映
        db.session.commit()
    musics = Music.query.all() #データベースの読み込み
    return render_template("music.html", musics=musics)

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



templates/music.html

<html>
<body> 
 <h1>Add book</h1>
    <form method="POST" action="/">
        <input type="text" name="title">
        <input type="submit" value="Add">
    </form>

    <h1>Musics</h1>
    {% for music in musics %}
      <p>{{music.title}}</p>
    {% endfor %}

  </body>
</html>



DBを作る、
Windows PCで作業していますので、プロジェクト・ディレクトリをカレント・ディレクトリにした後で、
以下のコマンドを実行します。

>set FLASK_APP=app.py
>set FLASK_DEBUG=1
>flask shell

App: app [production]
Instance: C:\Users\ユーザ名\Desktop\newpy\20190415 SQLALCHemy\instance
>>> from app import db
>>> db.create_all()
>>> exit()

これで、DBがプロジェクト・フォルダ内に作成されました。

app.pyを起動させると、以下のように、データ・ベース・テーブルに、データが格納され、読み込みもできることが確認できます。







0 件のコメント:

コメントを投稿