【WebアプリでDB その6】■SQLite +Flask | バイオとDX

バイオとDX

バイオ医薬品とDX、データサイエンス

■SQLite +Flask

→sqlite3.OperationalError: no such table: to_do というerrorがでてうまく起動せず。

書いたとおりにやったのに。

↓この内容でならうまくいけました。

(1)app.pyを実行して、(2)Web(http://127.0.0.1:5000)でアクセスします。

↓DB Browserで出来上がったデータベースを見るとちゃんと登録できてました。

↓あとはレイアウトできるようにして、

↓<Edit>があればいうことないのですが。

■app.py

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

app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///db.todo'
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False

db = SQLAlchemy(app)

class ToDo(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    todo = db.Column(db.String(128), nullable=False)

@app.route('/')
def index():
    data = ToDo.query.all()
    return render_template('todo.html',data=data)

@app.route('/add', methods=['POST'])
def add():
    todo = request.form['todo']
    new_todo = ToDo(todo=todo)
    db.session.add(new_todo)
    db.session.commit()
    return redirect(url_for('index'))

@app.route('/del_todo/<int:id>')
def del_todo(id):
    del_data = ToDo.query.filter_by(id=id).first()
    db.session.delete(del_data)
    db.session.commit()
    return redirect(url_for('index'))

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

■todo.html

<!doctype html>

<html>

    <head>

        <title>todo.html</title>

    </head>

    <body>

        <h1>Todo Application</h1>

        <form action="/add" method="POST">

            <input type="text" name="todo" placeholder="input todo!!"/>

            <input type="submit" value="Add"/>

        </form>

        <br>

        {% for d in data %}

            <p>{{d.id}} : {{d.todo}}</p>

            <a href="/del_todo/{{ d.id }}">[ delete ]</a>

        {% endfor %}

    </body>

</html>