buto > /dev/null

だいたい急に挑戦してゴールにたどり着かずに飽きる日々です

Python DB登録

SQLAlchemyを使ってMySQLにデータ登録

画面の入力フォームの値をDBに登録する(レイアウトは後回し)

f:id:butorisa:20201020172623p:plain

データを登録するテーブル定義

# カラム名 データ型 制約
1 no int primary_key, auto_increment
2 title varchar(100) not null
3 content varchar(1000) -

入力フォームを作成

入力フォームはいつもの書き方で <input name="xxx">で項目名を設定

        <form action="/post" method="post">
            <div class="input-group mb-3">
              <div class="input-group-prepend">
                <span class="input-group-text" id="basic-addon1">Title</span>
              </div>
              <input type="text" class="form-control" name="title" aria-label="Title" aria-describedby="basic-addon1">
            </div>
            <div class="input-group">
              <div class="input-group-prepend">
                <span class="input-group-text">content</span>
              </div>
              <textarea class="form-control" name="content" aria-label="With textarea"></textarea>
            </div>
            <button type="submit" class="btn btn-outline-info">submit</button>
        </form>

DB登録処理を作成

引数に登録するオブジェクトを取りsession.add()で登録する

    def register_item(self, item=None):
        """ itemテーブル登録 """
        session = db.create_session()
        session.add(item)
        session.commit()

Controllerを定義

POSTでリクエストが来たらDB登録処理を呼んで、画面表示処理を実行 request.form['xxx'](フォームのname属性)で入力値が受け取れる auto_incrementのカラムは値を設定しなくてOK

@app.route('/post', methods=['GET', 'POST'])
def register():
    if request.method == 'POST':
        # DB登録するオブジェクトを生成
        target = Item(title=request.form['title'], content=request.form['content'])
        Item.register_item(app, item=target)

        # 画面再表示
        return show_mindmap()

ソースコード一式はgithubに置きました

SQL弱者としてはSELECTとINSERTができればかなり満足