Flaskフレームワーク学習ノート-モデルモデルモデル
10767 ワード
記事の目次概要 1. ORM 2.原生SQLとORM比較 FlaskのORM 1. flask-sqlalchemy 2.接続データベース 3.FlaskでORM を使用するデータ移行 モデル 1.フィールドタイプ .共通拘束 3.モデルの作成 概要
Flaskのデフォルトでは、データベース操作のAPIは提供されていません.独自のプロジェクトに適したデータベースを選択して使用できます.
Flaskでは独自の選択を元の文で実現したり、ORM(SQLAlchemy,MongoEngine)を選択したりすることができます
1. ORM
FlaskはModelを通じてデータベースを操作して、あなたのデータベースのタイプがMySqlあるいはSqliteであることに関わらず、Flaskは自動的にあなたに相応のデータベースのタイプのSQL文を生成するように手伝って、だからSQL文とタイプに関心を持つ必要はなくて、データに対する操作Flaskは私達に自動的に完成するように手伝います.モデルを書けばいい
Flaskオブジェクトリレーションシップマッピング(Object Relational Mapping、略称ORM)フレームワークを使用してデータベースを操作する
ORM(Object Relational Mapping)オブジェクト関係マッピングは、オブジェクト向けプログラミング言語における異なるタイプのシステムのデータ間の変換を実現するプログラム技術である
2.原生SQLとORMの比較
オリジナルSQLの欠点:コードの利用率が低く、条件が複雑なコード文が長ければ長いほど、似たような文が多い いくつかのSQLは業務ロジックの中でつづったので、修正は業務ロジック を理解する必要があります直接書くSQLはSQLの問題を軽視しやすい ORMの利点:の使いやすさで、SQL の重複を効果的に減らすことができます.性能損失が少ない 設計は柔軟で、複雑なクエリー を簡単に実現できます.移植性が良い FlaskのORM
1. flask-sqlalchemy
FlaskはPythonが持参したORM:SQLAlchemyを使用
Flaskのサポート用にプラグインflask-sqlalchemyをインストール
2.データベースへの接続
(1)SQLite接続
(2)MySQLへの接続
3.FlaskでORMを使う
データベースに接続するには構成を指定する必要があります
データ移行
データ移行にはプラグインflask-migrateが必要です
(1)取付
(2)初期化
(3)コマンドラインでの使用
モデル#モデル#
1.フィールドタイプ
タイプ名
Pythonタイプ
説明
Integer
要点
通常の整数、一般的に32ビット
SmallInteger
要点
値の範囲の小さい整数を取って、普通は16ビットです
BigInteger
intまたはlong
精度を制限しない整数
Float
float
浮動小数点数
Numeric
decimal.Decimal
定点数
String
str
長い文字列
Text
str
長い文字列、長い文字列または長さに制限のない文字列を最適化
Unicode
unicode
Unicode文字列が長くなる
UnicodeText
unicode
Unicode文字列が長くなり、長い文字列や長さに制限されない文字列が最適化されました
Boolean
bool
ブール値
Date
datetime.date
日付
Time
datetime.time
時間
DateTime
datetime.datetime
日付と時刻
Interval
datetime.timedelta
時間間隔
LargeBinary
str
バイナリファイル
2.一般的な制約
オプション名
説明
primary_key
Trueに設定すると、この列がテーブルのプライマリ・キーになります.
unique
Trueに設定すると、この列に重複する値は許可されません.
index
Trueに設定すると、この列にインデックスが作成され、クエリーの効率が向上します.
nullable
Trueに設定すると、この列は空の値を使用できます.Falseに設定した場合、この列には空の値は使用できません.
default
この列のデフォルト値を定義します
autoincrement
じこぞうか
3.モデルの作成
Flaskのデフォルトでは、データベース操作のAPIは提供されていません.独自のプロジェクトに適したデータベースを選択して使用できます.
Flaskでは独自の選択を元の文で実現したり、ORM(SQLAlchemy,MongoEngine)を選択したりすることができます
1. ORM
FlaskはModelを通じてデータベースを操作して、あなたのデータベースのタイプがMySqlあるいはSqliteであることに関わらず、Flaskは自動的にあなたに相応のデータベースのタイプのSQL文を生成するように手伝って、だからSQL文とタイプに関心を持つ必要はなくて、データに対する操作Flaskは私達に自動的に完成するように手伝います.モデルを書けばいい
Flaskオブジェクトリレーションシップマッピング(Object Relational Mapping、略称ORM)フレームワークを使用してデータベースを操作する
ORM(Object Relational Mapping)オブジェクト関係マッピングは、オブジェクト向けプログラミング言語における異なるタイプのシステムのデータ間の変換を実現するプログラム技術である
2.原生SQLとORMの比較
オリジナルSQLの欠点:
1. flask-sqlalchemy
FlaskはPythonが持参したORM:SQLAlchemyを使用
Flaskのサポート用にプラグインflask-sqlalchemyをインストール
pip install flask-sqlalchemy
2.データベースへの接続
(1)SQLite接続
DB_URL = 'sqlite:///sqlite3.db'
#
# SQLite ,
(2)MySQLへの接続
#
DB_URL = 'mysql+pymysql://root:[email protected]:3306/flaskdb'
#
USERNAME = 'root'
PASSWORD = 'root'
HOSTNAME = '127.0.0.1'
PORT = 3306
DATABASE = 'flaskdb'
DB_URI = 'mysql+pymysql://{}:{}@{}:{}/{}'.format(
USERNAME,
PASSWORD,
HOSTNAME,
PORT,
DATABASE)
3.FlaskでORMを使う
データベースに接続するには構成を指定する必要があります
from flask import Flask
from flask_sqlalchemy import SQLAlchemy
DB_URL = 'sqlite:///sqlite3.db'
app = Flask(__name__)
# DB_URL
app.config['SQLALCHEMY_DATABASE_URI'] = DB_URL
#
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False
#
db = SQLAlchemy()
db.init_app(app)
if __name__ == '__main__':
app.run()
データ移行
データ移行にはプラグインflask-migrateが必要です
(1)取付
pip install flask-migrate
(2)初期化
from flask import Flask
from flask_script import Manager
from flask_sqlalchemy import SQLAlchemy
from flask_migrate import Migrate, MigrateCommand
DB_URL = 'sqlite:///sqlite3.db'
app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = DB_URL
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False
db = SQLAlchemy()
db.init_app(app)
# app db migrate
migrate = Migrate()
migrate.init_app(app=app, db=db)
# manager
manager = Manager(app)
manager.add_command('db', MigrateCommand)
if __name__ == '__main__':
manager.run()
(3)コマンドラインでの使用
# manage.py: app.py manage.py
# db:
python manage.py db init # , migrations
python manage.py db migrate #
python manage.py db upgrade #
python manage.py db downgrade #
モデル#モデル#
1.フィールドタイプ
タイプ名
Pythonタイプ
説明
Integer
要点
通常の整数、一般的に32ビット
SmallInteger
要点
値の範囲の小さい整数を取って、普通は16ビットです
BigInteger
intまたはlong
精度を制限しない整数
Float
float
浮動小数点数
Numeric
decimal.Decimal
定点数
String
str
長い文字列
Text
str
長い文字列、長い文字列または長さに制限のない文字列を最適化
Unicode
unicode
Unicode文字列が長くなる
UnicodeText
unicode
Unicode文字列が長くなり、長い文字列や長さに制限されない文字列が最適化されました
Boolean
bool
ブール値
Date
datetime.date
日付
Time
datetime.time
時間
DateTime
datetime.datetime
日付と時刻
Interval
datetime.timedelta
時間間隔
LargeBinary
str
バイナリファイル
2.一般的な制約
オプション名
説明
primary_key
Trueに設定すると、この列がテーブルのプライマリ・キーになります.
unique
Trueに設定すると、この列に重複する値は許可されません.
index
Trueに設定すると、この列にインデックスが作成され、クエリーの効率が向上します.
nullable
Trueに設定すると、この列は空の値を使用できます.Falseに設定した場合、この列には空の値は使用できません.
default
この列のデフォルト値を定義します
autoincrement
じこぞうか
3.モデルの作成
class User(db.Model):
#
__tablename__ = 'user'
# (id) ,
id = db.Column(db.Integer, primary_key=True, autoincrement=True)
name = db.Column(db.String(20), unique=True)
age = db.Column(db.Integer, default=1)