Flask で MySQL データベースを接続する

Salman Mehmood 2022年8月18日
Flask で MySQL データベースを接続する

この説明を使用して、flask_mysqldb を使用して Flask で MySQL データベースに接続する方法を学習します。また、オンラインでデータベースを設定する方法についても学びます。

Flask で flask_mysqldb を使用して MySQL データベースを接続する

ユーザーは、sql-alchemy のようなものを使用するのではなく、SQL で直接クエリを記述したい場合があるため、理由が何であれ、クエリを SQL で記述するオプションがあります。Flask では、mysqldb を使用してこれを行うことができます。

次に、freemysqlhosting.net というサービスで無料の MySQL データベースを作成します。このリンクを使用して Web サイトにアクセスできます。

アカウントを作成すると、以下のような画面が表示されます。データベースを作成すると、15 分以内にデータベース情報が記載されたメールが届きます。

無料の MySQL ホスティング

これで、Flask アプリ内の情報にこのデータベースを使用します。最初に行うことは、Flask-MySQLdb というモジュールをインストールすることです。

pip install Flask-MySQLdb

次に、必要なライブラリをインポートする必要があります。

from flask import Flask
from flask_mysqldb import MySQL

次に、アプリインスタンスを作成し、MySQL(app) クラスを使用してこのアプリをインスタンス化します。複数の Flask アプリを使用している場合は、次のコードを使用して Flask アプリを指定することもできます。

mysql = MySQL()
mysql.init_app(app)

ただし、すべてが 1つのファイルに含まれているため、これを行う必要はありません。また、データベースを使用しているため、構成をセットアップする必要があります。

まず、MYSQL_USER を定義する必要があり、次に MYSQL_PASSWORD が必要です。また、データベースが配置されている場所に MYSQL_HOST を定義する必要があります。ローカルマシン上にある場合もあれば、すでにまたは他の場所に設定されているような別のサービス上にある場合もあります。

データベース自体もあるので、データベースの名前を定義する必要があります。必ずしも必要ではない追加の構成を配置します。これは、返されたデータを取得するのに役立ちます。

タプルだけが必要ですが、データベースに関しては、列がキーになる可能性があり、それらのキーの値が特定の列の値になるため、辞書の操作が少し簡単になります。何も追加しない場合、デフォルトでタプルが使用されます。

app.config["MYSQL_USER"] = "user_name"
app.config["MYSQL_PASSWORD"] = "user_password"
app.config["MYSQL_HOST"] = "sql3.example.net"
app.config["MYSQL_DB"] = "Database_name"
app.config["MYSQL_CURSORCLASS"] = "DictCursor"

mysql = MySQL(app)

ポートを配置することはできますが、MySQL データベースはデフォルトで 3306 を使用するため、何も更新する必要はありません。ここでデータベースと対話したいので、ルートを作成し、CONNECT_DB() という関数を作成します。データベースと対話するには、カーソルを使用する必要があります。

カーソルを使用すると、ステートメントを実行して、それらのステートメントの結果を取得できます。CS という変数を作成し、mysql.connection.cursor() を使用してインスタンス化します。また、テーブルを作成して TABLE_NAME と呼び、いくつかの列を定義します。

@app.route("/")
def CONNECT_DB():
    CS = mysql.connection.cursor()
    CS.execute("""CREATE TABLE TABLE_NAME (id INTEGER, name VARCHAR(20))""")

すでにテーブルを作成しており、テーブルにデータを挿入します。次に、データを挿入した後、または更新または削除した後にコミットする必要があります。

また、データがデータベースに挿入されたときに文字列を返します。

CS.execute("""INSERT INTO TABLE_NAME VALUES (1, 'Harry')""")
CS.execute("""INSERT INTO TABLE_NAME VALUES (2, 'Arthor')""")
mysql.connection.commit()
return "Executed successfully"

先に進んでサーバーを実行し、文字列がブラウザに返されるかどうかを確認しましょう。インターネット接続が接続されていることを確認してください。

Flask MySQL-出力 1

データがデータベースに挿入されていることを確認する必要があります。次に、テーブルを選択するためのクエリを作成します。

複数の行を取得するため、fetchall() を使用できます。すべての情報を Executed_DATA 変数に入れます。

これをコンソールに出力し、戻り値を表示します。

CS.execute("""SELECT * FROM TABLE_NAME""")
Executed_DATA = CS.fetchall()
print(Executed_DATA)
return str(Executed_DATA[1]["name"])

ページを保存して更新しましょう。表示された値を確認できます。コンソールでここを見下ろすと、2つのアイテムを持つタプルが表示されます。

Flask MySQL-出力 2

完全な Python コード:

from flask import Flask
from flask_mysqldb import MySQL

app = Flask(__name__)

app.config["MYSQL_USER"] = "user_name"
app.config["MYSQL_PASSWORD"] = "user_password"
app.config["MYSQL_HOST"] = "sql3.example.net"
app.config["MYSQL_DB"] = "Database_name"
app.config["MYSQL_CURSORCLASS"] = "DictCursor"

mysql = MySQL(app)

# mysql.init_app(app)


@app.route("/")
def CONNECT_DB():
    CS = mysql.connection.cursor()
    # CS.execute('''CREATE TABLE TABLE_NAME (id INTEGER, name VARCHAR(20))''')

    # CS.execute('''INSERT INTO TABLE_NAME VALUES (1, 'Harry')''')
    # CS.execute('''INSERT INTO TABLE_NAME VALUES (2, 'Arthor')''')
    # mysql.connection.commit()
    # return 'Executed successfully'

    CS.execute("""SELECT * FROM TABLE_NAME""")
    Executed_DATA = CS.fetchall()
    print(Executed_DATA)
    return str(Executed_DATA[1]["name"])


if __name__ == "__main__":
    app.run(debug=True)
著者: Salman Mehmood
Salman Mehmood avatar Salman Mehmood avatar

Hello! I am Salman Bin Mehmood(Baum), a software developer and I help organizations, address complex problems. My expertise lies within back-end, data science and machine learning. I am a lifelong learner, currently working on metaverse, and enrolled in a course building an AI application with python. I love solving problems and developing bug-free software for people. I write content related to python and hot Technologies.

LinkedIn