kuroの覚え書き

96の個人的覚え書き

MySQLとの接続

キタ━━━━(゚∀゚)━━━━!!
ってほどでもないが、ようやくトップページをどういう風に編集したらどう表現されるかわかってきた。
MySQLデータベースとの接続にも成功し、ブラウザから投げたwordをデータベースに書き込み、書き込んだデータベースから読み出したデータを画面上に埋め込む事ができるようになった。

shiroさんは前に書き込んだことがあるからデータベースにエントリーされており、Happy to see you again!というメッセージを返してもらっている。

ただそれだけで他のリンクとかはまだ全然実装してないけど。あと読み込んだデータにハイパーリンクをつけて他のページへリンクを張る方法もこれから。

app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql+pymysql://root:password@localhost/flaskdata'

SQLとの接続部分はこういうふうに書き換えるだけ。MySQLのお作法としてdatabaseの名前に拡張子とかつけちゃいけない。
あとpymysqlモジュールをインストールしておく必要がある。
現状データベースへのアクセス用ユーザとパスワードをここに書いちゃっているので、そこはさらに動的に変動させられるように細工がいる。

データベース自体はやはり前もってMySQLの本体側で作っておく必要がある。

mysql > create database flaskdata default character set utf8;
mysql> show create database flaskdata;
+-----------+--------------------------------------------------------------------+
| Database  | Create Database                                                    |
+-----------+--------------------------------------------------------------------+
| flaskdata | CREATE DATABASE `flaskdata` /*!40100 DEFAULT CHARACTER SET utf8 */ |
+-----------+--------------------------------------------------------------------+
1 row in set (0.00 sec)

これさえやっとけばあとは

(venv3) $ python3 hello.py shell
>>> from hello import db
>>> db.create_all()
>>> from hello import Role, User
・・・・

という感じにテーブルをpythonの方で作っていける。

結局のところSQLiteだろうがMySQLだろうがpythonから同じコマンドで操作できるようにしているのがSQLAlchemyの役割なんだな。

一通りテーブルができてしまえばあとはwebからの入力でrowは増やしていけるというわけだな。
ページビューの方も
base.htmlのnavbarのところを

{% block navbar %}
<div class="navbar navbar-inverse" role="navigation">
    <div class="container">
        <div class="navbar-header">
            <button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".navbar-collapse">
                <span class="sr-only">Toggle navigation</span>
                <span class="icon-bar"></span>
                <span class="icon-bar"></span>
                <span class="icon-bar"></span>
            </button>
            <a class="navbar-brand" href="/">Database</a>
        </div>
        <div class="navbar-collapse collapse">
            <ul class="nav navbar-nav">
                <li><a href="/">Home</a></li>
            </ul>
            <ul class="nav navbar-nav">
              <li class="dropdown">
                    <a href="#" class="dropdown-toggle" data-toggle="dropdown">Experiments </a>
                    <ul class="dropdown-menu">
                      <li><a href="/">Exome</a></li>
                      <li><a href="/">RNA-seq</a></li>
                      <li><a href="/">Proteome</a></li>
                    </ul>
              </li>
            </ul>
            <ul class="nav navbar-nav">
                <li><a href="/">Announcement</a></li>
            </ul>
            <ul class="nav navbar-nav">
                <li><a href="/">Publications</a></li>
            </ul>
            <ul class="nav navbar-nav">
                <li><a href="/">Contact</a></li>
            </ul>
            <ul class="nav navbar-nav navbar-right">
                <li class="dropdown">
                    <a href="#" class="dropdown-toggle" data-toggle="dropdown">Account </a>
                    <ul class="dropdown-menu">
                        <li><a href="/">Change Password</a></li>
                        <li><a href="/">Change Email</a></li>
                        <li><a href="/">Log Out</a></li>
                    </ul>
                </li>
            </ul>
        </div>
    </div>
</div>
{% endblock %}

{% block content %}
<div class="container">
    {% for message in get_flashed_messages() %}
    <div class="alert alert-warning">
        <button type="button" class="close" data-dismiss="alert">&times;</button>
        {{ message }}
    </div>
    {% endfor %}

    {% block page_content %}{% endblock %}
</div>
{% endblock %}

だいたいこんな感じで書いていけばそれっぽくなる。リンクはまだ全然張ってない。