この記事では、Flask SQLAlchemy という ORM – Object Relational Mapper を使って、Flask アプリケーションと PostgreSQL データベースシステムを接続する方法を学びます。
PostgreSQLとは?
PostgreSQLは、MySQLデータベース管理システムと同様に、データベーステーブルの形でデータにアクセスし、保存し、処理するために使用されるRDBMSの別のタイプです。
PostgreSQLは、SQL- Structured Query Languageを使用してデータベースにアクセスし、処理することができ、またPostgreSQLで様々なタスクを実行することができます。
PostgreSQLの基本構造
Postgres DB の内部では、データはテーブルの形で保存されます。
典型的なPostgresのテーブルは次のようなものです。
| ID|名前|クラス|学年|など
| — | — | — | — |
| 1|アリア|IX|B|。
| 2|Snippy|X|A|。
| 3|レイ|VIII|D|||。
| 4|キム|VI|A|。
| 5|ジェニファー|XII|B|||。
| 6|ジニー|X|A|。
PostgreSQLのテーブル行はレコードと呼ばれ、列はフィールドと呼ばれます。
したがって、上記のテーブルでは、6つのレコードと4つのフィールドがあります。
MySQLとPostgreSQLの違い
MySQLとPostgreSQLはどちらもRDBMSに属しますが、両者にはいくつかの重要な違いがあります。
- MySQLとPostgreSQLの基本的な違いの1つは、PostgreSQLがORDBMS(オブジェクトリレーショナルデータベース管理システム)であるのに対し、MySQLはコミュニティ主導のRDBMSであることです。
- MySQLがJSONしかサポートできないのに対し、PostgreSQLはJSONやXMLなどの最新のアプリケーション機能をサポートできることもMySQLに対するPostgreSQLの利点です。
なぜ SQLAlchemy で PostgreSQL を Flask アプリケーションに接続するのか?
SQLAlchemy は Python で書かれた ORM-Objects Relational Mapper です。
SQLAlchemy は Python で書かれたオブジェクトリレーショナルマッパーで、 SQL 文を使わずにデータベースとやりとりするためのものです。
SQLAlchemy は SQL の上に追加レイヤーを提供し、データベースやテーブルを Python のクラスオブジェクトのように使うことを可能にします。
クラスオブジェクトを作るだけで、あとは SQLAlchemy がやってくれます。
Flask では、 Django Models という形で ORM があらかじめ用意されている Django と違って、 ORM はあらかじめ用意されていません。
したがって、この Web フレームワークでモデルを使うには、 Flask-SQLAlchemy ORM ライブラリをインストールする必要があります。
この記事もチェック:FlaskとSQLAlchemyを使ってログイン認証機能を実装する方法
システムにPostgreSQLをセットアップする
このセクションでは、Flask- SQLAlchemy-Postgres プロジェクトで必要なパッケージをすべてダウンロードし、セットアップします。
1. PostgreSQLシェルのインストール
PostgreSQLをインストールするには、こちらのリンクにアクセスします。
PostgreSQLがインストールされたら、SQLシェルを開き、DB接続のユーザー名とパスワードを設定します。
以下のコマンドを実行し、ターミナルでシェルを開きます。
sudo su postgres pqsl
|
Windowsの場合は、検索メニューでSQLシェルを直接検索してください。
接続の詳細はデフォルトのままです(括弧内)。
- サーバー:localhost
- データベース:postgres
- ポート: 5433
- ユーザー名:postgres
パスワードを入力すると、デフォルトでPostgreSQLのDBにプロンプトが表示されます。
では、データを保存するためにFlaskという名前で新しいDBを作成しましょう。
CREATE DATABASE <db_name>;
|
ここでは SQL 構文のみを使用しています。
JournalDev のサイトにある SQL チュートリアルを見て、クエリ言語についての知識を得てください。
現在のDBをFlask DBに変更するには、次のコマンドを使用します。
c <db_name>; |
これで、新しいFlask DBになりました。
pip install psycopg2-binary
|
この記事もチェック:FlaskのCookiesの設定、保存や取得等の使い方を分かりやすく解説する
2. アダプターツール psycopg2 のインストール
Python用のPostgreSQLデータベースアダプタであるpyscopg2も必要です。
pipコマンドを実行しましょう。
pip install flask-sqlalchemy
|
3. Flask 用 ORM パッケージのインストール
まず最初に Flask-SQLAlchemy ORM をインストールする必要があります。
パッケージのインストールは、以下のコードを実行するだけです。
pip install Flask-Migrate
|
また、Flask-Migrateもインストールする必要があります。
Flask-Migrate は Alembic という軽量なデータベースマイグレーションツールを使用します。
データベースやテーブルを作成・更新することができます。
また、テーブルのフィールドを削除したり、新規に作成した場合、既存のテーブルを更新することができます。
Flask-Migrateをインストールするには、以下のコマンドを実行します。
from flask_sqlalchemy import SQLAlchemy
db = SQLAlchemy()
class Model_name(db.Model):
__tablename__ = 'table_name'
field1_name = db.Column(db.Field1Type, primary_key...)
field2_name = db.Column(db.Field2Type)
field3_name = db.Column(db.Field3Type)
def __init__( self , Field1_name,Field1_name,Field1_name):
self .field1_name = field1_name
self .field2_name = field2_name
self .field3_name = field3_name
def __repr__( self ):
return f "<statement>"
|
これで完了です。
SQLAlchemy を使って Flask で PostgreSQL データベース接続を実装する
ここでは、Databaseにユーザ情報を格納する簡単なFlaskアプリケーションを作成します。
この記事もチェック:Flaskでフォームを実装|ユーザーの入力を受け取る方法などを解説
1. Flask モデルの作成
モデルとは、データベース内のテーブルを表す Python のクラスです。
テーブルの構造に関する情報を含んでいます。
Flaskでは、すべてのDB情報とモデルを、メインアプリケーションのファイルのすぐ横にあるmodels.pyという別のファイルに保存するのがよりシステマチックな方法です。
典型的なmodels.pyファイルは以下のようなものです。
from flask_sqlalchemy import SQLAlchemy
db = SQLAlchemy()
class InfoModel(db.Model):
__tablename__ = 'info_table'
id = db.Column(db.Integer, primary_key = True )
name = db.Column(db.String())
age = db.Column(db.Integer())
def __init__( self , name,age):
self .name = name
self .age = age
def __repr__( self ):
return f "{self.name}:{self.age}"
|
これは、古典的なPythonのクラスと同じようなものです。
これらは、テーブルのフィールドとその表現を示しています。
そこで、ユーザー情報を格納するための小さなInfoModelテーブルを作成してみましょう。
models.py。
from flask_sqlalchemy import SQLAlchemy
from flask_migrate import Migrate
from models import db, InfoModel
app = Flask(__name__)
app.config[ 'SQLALCHEMY_DATABASE_URI' ] = "postgresql://<username>:<password>@<server>:5432/<db_name>"
app.config[ 'SQLALCHEMY_TRACK_MODIFICATIONS' ] = False
db.init_app(app) migrate = Migrate(app, db)
#general Flask Code @app .route('')
# Your code if __name__ = = '__main__' :
app.run(debug = True )
|
2. Flask アプリケーションの作成
では、FlaskアプリケーションとPostgresを接続します。
構文は以下の通りです。
from flask import Flask,render_template,request
from flask_migrate import Migrate
from models import db, InfoModel
app = Flask(__name__)
app.config[ 'SQLALCHEMY_DATABASE_URI' ] = "postgresql://postgres:1148@localhost:5432/flask"
app.config[ 'SQLALCHEMY_TRACK_MODIFICATIONS' ] = False
db.init_app(app) migrate = Migrate(app, db)
@app .route( '/form' )
def form():
return render_template( 'form.html' )
@app .route( '/login' , methods = [ 'POST' , 'GET' ])
def login():
if request.method = = 'GET' :
return "Login via the login Form"
if request.method = = 'POST' :
name = request.form[ 'name' ]
age = request.form[ 'age' ]
new_user = InfoModel(name = name, age = age)
db.session.add(new_user)
db.session.commit()
return f "Done!!"
if __name__ = = '__main__' :
app.run(debug = True )
|
ここで
- Flask オブジェクト – app を作成します。
- そして、PostgreSQLの接続を設定します。
- シンプルにするために、SQL_TRACK_MODIFICATIONSをFalseにしています。
- それから、SQLAlchemyオブジェクトのdbにappオブジェクトを渡す。
- 移行用の Migrate オブジェクトを作成します。
以上です。
また、app.py ファイルに以下の Views を追加してください。
apps.pyに以下のViewsを追加します。
python db init python db migrate python db upgrade |
クラスオブジェクトと同じように、テーブルを操作することができます。
以下のようにします。
- 新しいデータを追加するには、db.session.add() を使用します。
- db.session.comit() で変更内容を保存します。
この記事もチェック:FlaskでのMySQLの使い方|インストールや接続を解説する
3. Flaskのコードを実装する
最後に残っているのは、migrationsを実行することです。
というわけで、コマンドを実行します。
python app.py |
これで完了です。
次に、サーバーを実行します。
SELECT * FROM info_table
|
そして、ブラウザをチェックしてみましょう。
“/form “にアクセスします。
送信をクリック
これで、PostgreSQLのシェルで、タイプすることができました。
と入力すると、データが表示されます。
完璧です。
まとめ
以上、皆さんお疲れ様でした! 以上、FlaskのPostgreSQLとSQLAlchemyの接続設定についてでした。