不惑にしてまだ何者でもない者のブログ

Arduino関連、Raspberry Pi関連、プログラミング学習

paizaラーニング『Flask入門編4:SQLAlchemyでデータベースを操作しよう (全8回) 』を受講してみた

2021-02-09 22:10:26 | paiza

『Flask入門編4:SQLAlchemyでデータベースを操作しよう (全8回) 』


どうやら今回は、レッスン3とは異なり、
SQLの記述をしなくてもいいらしい。
でも結局データベースは用意しないといけないみたい😅 

本当に、WebアプリとかDB系は全然知らないことばかりだ。
Flask入門編が終わったら、DB/SQLの講座を受けてみよう。

メモ

#01:SQLAlchemyの役割と効果

  • データベースを効率よく操作できるORマッパー「SQLAlchemy」の役割と効果について学習する。
  • SQLAlchemyとは
    SQLAlchemyは、データベースのレコードをPythonのオブジェクトに割り当てる機能を持ったライブラリ。SQLAlchemyを使うと、データベースのレコードをオブジェクトとして扱えるようになり、SQLを書かなくても、Pythonのコードでデータベースが操作できる。
  • 参考になるWebページ
  • SQLAlchemyのインストールは以下の通り。
    pip install sqlalchemy
    • どうやら自分の環境だと既にインストール済みだった。
    • でもこの状態で
      from flask_sqlalchemy import SQLAlchemy
      を実行すると、flask_sqlalchemyって名前のモジュールはないよ!ってエラーになってしまった。😖 
      → どうやらそれとは別のflask_sqlalchemyをインストールしないといけないみたい。
      pip install flask_sqlalchemy
      参考URL:https://qiita.com/shirakiya/items/0114d51e9c189658002e

#02:Flask_SQLAlchemyでデータを表示する

  • Flask_SQLAlchemyでデータベースを操作する
    myapp/flask_app.py

    from flask_sqlalchemy import SQLAlchemy

#03:SQLAlchemyでデータを表示しよう

  • 最初の5件を取り出す
    players = Player.query.limit(5).all()
  • 条件に一致したデータだけを取り出す
    players = Player.query.filter(Player.level >= 5)
  • SQLAlchemyは、SQLインジェクションに対して比較的安全。

#04:SQLAlchemyでデータベースを使ってみよう

  • SQLAlchemyとFlaskで、データを追加する
  • SQLAlchemyとFlaskで、データを更新する
  • SQLAlchemyとFlaskで、データを削除する

#05:SQLAlchemyでテーブルを連結してデータを取り出す

  • テーブルを連結する
    • 外部キーを設定する
      job_id = db.Column(db.Integer, db.ForeignKey('jobs.id'))
    • リレーションシップを設定する
      player = db.relationship('Player', backref=db.backref('jobs', lazy=True))

認定証

結構、演習課題の難度とジャッジの遅さに手こずったけど、
一応認定証を取得。


学習ステータス

駆け出しから小粋な侍に進化した。
もともと駆け出しでも結構小粋だったけど、
髪が伸びてより小粋になったかな。😁 

paizaラーニング『Flask入門編3:Pythonでデータベースの基本を理解しよう (全7回)』を受講してみた

2021-02-09 13:01:00 | paiza

『Flask入門編3:Pythonでデータベースの基本を理解しよう (全7回) 』


SQLの知識が必要っぽいな😨 
これはさすがに今の知識では、
SQLを自分の環境を整備するのは厳しいかな?😰 
phpMyAdminってのをインストールすればいいみたいだけど・・・

ただ、PythonでPyMySQLモジュール(ライブラリ?)が必要になるみたいだから、一応インストールしておこう。

pip install PyMySQL

※ ちなみに、最初こっちをインストールしてしまったけど、今回のとは違うみたい。
pip install mysql-connector-python
参考URL:

でも結局SQLサーバーがないから、Pythonのスクリプトを実行したところで、何も反応無いんだけど・・・

メモ

#01:Pythonでデータベースに接続しよう

  • Pythonで、データベースからデータを取り出す
    import pymysql

#02:Flaskでデータベースから表示しよう

  • Flaskを起動する
    $ FLASK_APP=hello.py FLASK_ENV=development flask run

#03:Pythonでデータベースを使ってみよう1

  • SQL文の例
    • # 全てのデータを取り出す
      SELECT * FROM players;
    • # 一部のカラムだけ取得する
      SELECT name, level FROM players;
    • # 一部の行だけ取得する
      SELECT * FROM players WHERE level >= 7;
    • # 複数の条件を組み合わせる
      SELECT * FROM players WHERE level >= 7 AND job_id <> 6;
      SELECT * FROM players WHERE level >= 7 OR job_id = 6;
    • #条件指定とカラム選択を組み合わせる
      SELECT name, level FROM players WHERE level >= 7;
  • 変数で条件を指定する
    myapp/hello.py

        sql = "SELECT * FROM players WHERE level >= %s AND level <= %s"
     cursor = connection.cursor()
     cursor.execute(sql, (5, 10))
     players = cursor.fetchall()

#04:Pythonでデータベースを使ってみよう2

  • データベースにデータを追加する
     sql = "INSERT INTO players (name, level, job_id) VALUES ('霧島1号', 1, 1)"
     cursor.execute(sql)
     connection.commit()
  • データベースのデータを更新する
     sql = "UPDATE players SET level = 10 WHERE id = 11"
     cursor.execute(sql)
     connection.commit()
  • データベースからデータを削除する
     sql = "DELETE FROM players WHERE id = 11"
     cursor.execute(sql)
     connection.commit()

#05:Pythonでテーブルを連結してデータを取り出す

  • 複数のテーブルを結合して扱う方法を学習する。
    • SQLを使って、mydbデータベースの「players」テーブルの「job_id」と「jobs」テーブルの「id」を結合する。
  • テーブルの結合とは
    テーブルの結合とは、重複したデータのテーブルを分割しておいて、必要に応じて、仮想的な1つの表として連結して扱う方法。このようにテーブルを結合することを「リレーション」とか「連結」「関連付け」と呼ぶ場合もある。
  • 結合の種類
    • 内部結合(INNER JOIN):両方のテーブルに共通のデータを表示
    • 外部結合
      • 左結合(LEFT JOIN):左側テーブルを基準に表示
      • 右結合(RIGHT JOIN):右側テーブルを基準に表示
      • 完全外部結合:
  • SQL文の例
    • # 左結合
      SELECT * FROM players LEFT JOIN jobs ON jobs.id = players.job_id

#06:データをtableタグで表示する

  • Flaskでデータベースの値を表示する時の見栄えを整える。
    そのために、HTMLのtableタグを使って、データを表示する。


認定証

自分の環境でデータベース(SQL?)を用意できなかったから、
イマイチやった感がなかったな。

それにしても演習課題の実行環境構築に何度も失敗したり、
ジャッジに時間が掛かったりするのが面倒だった。



学習ステータス
浪人から駆け出し侍に進化した。
駆け出しとはいえ、そんな格好の侍って大丈夫なのだろうか?😁