flaskでmysqlを使ってローカルDBを作る

 

全体の流れ

全体の流れとしては、

 

  1. まずコマンドプロンプトに管理者としてアクセス
  2. mysqlサーバーを立ち上げ、
  3. ログインしてデータベースを作成。
  4. vscodeに戻り、
  5. テーブル名と追加したいカラムを定義
  6. レコードをおまじないのように書き追加して作成。

 

 

まずローカルDBを立ち上げます。

まずコマンドプロンプトと検索して

管理者として実行を押します。

 

 

mysql --version

mysqlのバージョンを調べ

 

net start mysql80

 

mysqlを起動します。

 

既に起動されている場合はこの工程は無視してください。

なお下記のコマンドでmysqlを停止できます。

net stop mysql80

 

mysqlにログイン

なお次に下記のコマンドを入力してログインします。

mysql --user=root --password

このように表示されたら成功です。

 

show databases;

でデータベースを表示することが可能です

 

 

データベースの作成。

CREATE DATABASE データベース名;

でデータベースを作成する事ができます。

 

データベース削除

drop database 削除したいデータベース名;

でデータベースを削除する事ができます。

 

作成したデータベースをFlaskに繋げる。

まずは

pip install Flask-SQLAlchemy

pip install pymysql

 

をインストールします

 

そして下記をインポートして

 

from flask_sqlalchemy import SQLAlchemy
from sqlalchemy.dialects.mysql import INTEGER, VARCHAR

 

先ほどはサーバー内にデータベースを作りましたが、

今度はでデータベース内にテーブルを作っていきます。

 

class Memo(db.Model):
    """
        Memoモデルの定義
    """
    __tablename__ = "memos"

    id = db.Column("id", INTEGER(11), primary_key=True)
    memo = db.Column("memo", VARCHAR(255), nullable=True)

# テーブルの生成
db.create_all()

クラスと

 __tablename__ = "memos"

で、テーブル名を定義して、

 

その下にカラムを追加していきます。

 

それで終わり。

 

後は基本的にhtmlのフォームの内容をpythonで取得して、

 

レコードに挿入したり

 

取り出したりする。

 

下記はサンプルコード。

 

# おまじない
app.config["SQLALCHEMY_TRACK_MODIFICATIONS"] = False

# dbの初期化
db = SQLAlchemy(app)

class User(db.Model):
    """
        Userモデルの定義
    """
    __tablename__ = "users"

    id = db.Column("id", INTEGER(11), primary_key=True)
    memo = db.Column("memo", VARCHAR(255), nullable=True)


@app.route("/insert", methods=["POST"])
def insert():
    # postの受け取り
    id_txt = request.form["id"]
    # idの生成
    id = User(id=id_txt)

    # postの受け取り
    memo_txt = request.form["memo"]
    # Memoの生成
    memo=User(memo=memo_txt)
   
    # Userオブジェクトを作成し、IDとMemoを設定
    new_user = User(id=id_txt, memo=memo_txt)
    # UserをDBに反映
    db.session.add(new_user)
    db.session.commit()

@app.route("/select", methods=["GET"])
def select():
    Users = User.query.all()
   
   
    return  render_template('f.html',memos=Users)


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

 

 

ログイン機能。