データベース内のフラスコ
データベースをサポートしていません自体をフラスコ、データベースプラグインは、選択の自由を使用しています。
データベースは、2つのカテゴリに分かれて、リレーショナル・データベースであるクラス間の関係のモデル以下、他のNoSQLのと呼ばれる非リレーショナルデータベースであり、彼らは人気のリレーショナルクエリ言語のSQLのパフォーマンスをサポートしていないです。
フラスコSQLAlchemyのデータベース管理を使用します
フラスコSQLAlchemyのフラスコの拡張子はフラスコプログラムでの単純化された業務用SQLAlchemyのです。SQLAlchemyのはサポートしています非常に強力なリレーショナルデータベースフレームワークを含む、データベースソフトウェアMySQLの、PostgreSQLとSQLiteのがたくさん含まれています。
- インストール
pip install flask-sqlalchemy
- 一般的なURLのデータベース形式
mysql mysql://username:password@hostname/database
postgres postgresql://username:password@hostname/database
sqlite sqlite:///absolute/path/to/database
- 設定データベース
# config.py
import os
basedir = os.path.abspath(os.path.dirname(__file__))
class Config(object):
SECRET_KEY = os.environ.get('SECRET_KEY') or 'marksecret'
SQLALCHEMY_DATABASE_URI = os.environ.get('DATABASE_URL') or \
'mysql://root:root@localhost/flask' + os.path.join(basedir, 'app.db')
SQLALCHEMY_TRACk_MODIFICATIONS = True
SQLALCHEMY_COMMIT_TEARDOWN = True
# __init__.py变更后
from flask import Flask
from config import Config
from flask_sqlalchemy import SQLAlchemy
from flask_migrate import Migrate
app = Flask(__name__)
app.config.from_object(Config)
db = SQLAlchemy(app)
migrate = Migrate(app,db)
from app import routes,models
モデル
多くの場合、データモデルと呼ばれるデータベースのテーブルとフィールドでのクラス定義、。例ORM(sqlalchemyの)は、データベーステーブル内のクラスのデータ列、および翻訳に関連する動作に関連します。
mysql> desc user;
+---------------+--------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+---------------+--------------+------+-----+---------+-------+
| id | int(11) | NO | PRI | NULL | |
| username | varchar(64) | YES | | NULL | |
| email | varchar(120) | YES | | NULL | |
| password_hash | varchar(128) | YES | | NULL | |
+---------------+--------------+------+-----+---------+-------+
コードの実装
# models.py
from app import db
class User(db.Model):
id =db.Column(db.String(64), primary_key=True,index=True, unique=True)
username = db.Column(db.String(64), index=True, unique=True)
email = db.Column(db.String(120), index=True, unique=True)
password_hash = db.Column(db.String(128))
def __repr__(self):
return '<User {}>'.format(self.username)
テスト
>>> from app.models import User
>>> u = User(username='mark',email='[email protected]')
>>> u
<User mark>
>>>
関係
リンクテーブル内の別の行に関係を使用してリレーショナルデータベース。関係を確立すると、データベースは、クエリでそれを表示することができます。
ロールテーブルは、利用可能なすべてのユーザの役割(すなわち、テーブルの主キー)が識別される固有のID値をそれぞれ。このように、各ユーザのための役割を指定されたほかのユーザーテーブルのidの主キー、外部キーROLE_ID、参照文字のID、で。
サンプルコード
# hello.py
class Role(db.Model):
#...
users = db.relationship('User',backref='role')
class User(db.Model):
#...
role_id = db.Column(db.Integer,db.ForeignKey('role.id'))
外部キー関係テーブルを使用してユーザーが2つの行を接続します。ユーザモデルのROLE_IDに追加されましたが、外部キーとして定義され、外部キーは、この確立された関係です。渡さdb.ForeignKey()ROLE_IDパラメータは、この値はテーブル値ロールのID列であることを示し
db.relationship()最初のパラメータは関係がどのモデルのもう一方の端であることを示しています。後方参照role属性パラメータは逆の関係を定義するために、ユーザーモデルに追加しました。この属性は、代わりにアクセスできる役割モデルではなく、外部キーの値に、この時点で取得したオブジェクトのモデルですROLE_ID。
データベース操作
- 増加
- 検索
- 削除
変更
データベース機能の動作の観点から
Pythonシェル