第五章--データベース
3966 ワード
一、SQLデータベース
リレーショナル・データベースとも呼ばれ、リレーショナル・データベースはデータをテーブルに格納し、テーブル・シミュレータの異なるエンティティを表します.表の列数は定義時に固定され、行数は可変である.列は表に示すエンティティのデータ属性を定義し、行は各列に対応する実際のデータを定義します.リレーショナル・データベース・エンジンは、結合操作に必要なサポートを提供します.
二、NoSQLデータベース
リレーショナル・データベース・モデルに従わないすべてのデータベースを総称してNoSQLデータベースと呼びます.NoSQLはテーブルの代わりにコレクションを使用し、レコードの代わりにドキュメントを使用します.NoSQLが採用した設計方法では、結合操作が難しいため、ほとんどのNOSQLデータベースではサポートされていません.NoSQLはテーブルの数を減らし、データの重複量を増やしますが、このデータの重複はクエリーの速度を向上させることができます.
三、SQLを使うか、それともNoSQLを使うか
SQLデータベースは、構造化されたデータを効率的かつコンパクトに格納するのに役立ちます.NoSQLは、一貫性の要件を緩和し、パフォーマンスのメリットを提供します.中小型Webプログラムでは、SQLもNoSQLも優れた選択であり、パフォーマンスも優れています.
四、Pythonデータベースフレームワーク
PASS
五、Flask-SQLAlchemyを使用してデータベースを管理する
SQLAlchemyは強力なリレーショナル・データベース・フレームワークであり、複数のデータベース・バックグラウンドをサポートし、上位ORMを提供し、データベースの元のSQLを使用する下位機能も提供しています.
SQLiteはサーバを必要としないので、他の情報を指定する必要はありません.databaseはファイル名プログラムで使用されるデータベースURLです.Flask構成オブジェクトに保存する必要があるSQLALCHEMY_DATABASE_URIキーにあります.SQLALCHEMY_の設定COMMIT_ON_TEARDOWNはTrueで、リクエストが終了すると自動的に送信されます
六、モデルの定義
モデルはプログラムが使用する永続化エンティティを表し、ORMではモデルがPythonクラスであり、クラス属性はデータベーステーブルの列に対応する.
七、関係
リレーショナル・データベースは、リレーショナルを使用して異なるテーブルのローを関連付けます.関係には、一対一の関係、一対多の関係などがあります.
八、データベース操作
1、テーブルの作成
2-8、データベース操作(shell)
ここではpython shellでデータベース操作を行い、後でピットを埋めます.
9、ビュー関数でデータベースを操作する
10、python shellの統合
shellセッションを開始するたびにデータベースインスタンスとモデルをインポートするのは面倒ですが、常にインポートしないようにFlask-Scriptのshellコマンドを使用して特定のオブジェクトを自動的にインポートできます.
make_shell_context()関数はプログラム、データベースインスタンス、モデルを登録し、shellに直接インポートできます.
11.Flask-Migrateによるデータベース移行
1、移行倉庫の作成
2、移行スクリプトの作成
3、データベースの更新
この操作はまずdbを用いる.created_all()は,変更をデータに適用し,既存のデータに影響を及ぼさない.
リレーショナル・データベースとも呼ばれ、リレーショナル・データベースはデータをテーブルに格納し、テーブル・シミュレータの異なるエンティティを表します.表の列数は定義時に固定され、行数は可変である.列は表に示すエンティティのデータ属性を定義し、行は各列に対応する実際のデータを定義します.リレーショナル・データベース・エンジンは、結合操作に必要なサポートを提供します.
二、NoSQLデータベース
リレーショナル・データベース・モデルに従わないすべてのデータベースを総称してNoSQLデータベースと呼びます.NoSQLはテーブルの代わりにコレクションを使用し、レコードの代わりにドキュメントを使用します.NoSQLが採用した設計方法では、結合操作が難しいため、ほとんどのNOSQLデータベースではサポートされていません.NoSQLはテーブルの数を減らし、データの重複量を増やしますが、このデータの重複はクエリーの速度を向上させることができます.
三、SQLを使うか、それともNoSQLを使うか
SQLデータベースは、構造化されたデータを効率的かつコンパクトに格納するのに役立ちます.NoSQLは、一貫性の要件を緩和し、パフォーマンスのメリットを提供します.中小型Webプログラムでは、SQLもNoSQLも優れた選択であり、パフォーマンスも優れています.
四、Pythonデータベースフレームワーク
PASS
五、Flask-SQLAlchemyを使用してデータベースを管理する
pip install flask-sqlalchemy
SQLAlchemyは強力なリレーショナル・データベース・フレームワークであり、複数のデータベース・バックグラウンドをサポートし、上位ORMを提供し、データベースの元のSQLを使用する下位機能も提供しています.
MySQL:mysql://username:password@hostname/database
Postgres:postgresql://username:password@hostname/database
SQLite(Unix):sqlite:////absolute/path/to/database
SQLite(Windows):sqlite:///c:/absolute/path/to/database
SQLiteはサーバを必要としないので、他の情報を指定する必要はありません.databaseはファイル名プログラムで使用されるデータベースURLです.Flask構成オブジェクトに保存する必要があるSQLALCHEMY_DATABASE_URIキーにあります.SQLALCHEMY_の設定COMMIT_ON_TEARDOWNはTrueで、リクエストが終了すると自動的に送信されます
六、モデルの定義
モデルはプログラムが使用する永続化エンティティを表し、ORMではモデルがPythonクラスであり、クラス属性はデータベーステーブルの列に対応する.
from flask.ext.sqlalchemy import SQLAlchemy #
basedir = os.path.abspath(os.path.dirname(__file__)) #
app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = \ # URL
'sqlite:///' + os.path.join(basedir, 'data.sqlite')
app.config['SQLALCHEMY_COMMIT_ON_TEARDOWN'] = True #
db = SQLAlchemy(app) #
class Role(db.Model): # db.Model
__tablename__ = 'roles' #
id = db.Column(db.Integer, primary_key=True) # , ,Int
name = db.Column(db.String(64), unique=True) # ,Str ,64 ,
def __repr__(self): # ,
return ''%self.name
七、関係
リレーショナル・データベースは、リレーショナルを使用して異なるテーブルのローを関連付けます.関係には、一対一の関係、一対多の関係などがあります.
class Role(db.Model):
#...
users = db.relationship('User', backref='role')
#db.relationship()
#backref User role ,
class User(db.Model):
#...
role_id = db.Column(db.Integer, db.ForeignKey('roles.id')
#db.ForeignKey roles id
八、データベース操作
1、テーブルの作成
# python shell , hello
from hello import db
db.create_all() #
db.drop_all() #
2-8、データベース操作(shell)
ここではpython shellでデータベース操作を行い、後でピットを埋めます.
9、ビュー関数でデータベースを操作する
from model import User
User.query.filter_by(username=form.name.data).first() #
user = User(username=form.name.data) #
db.session.add(user) #
10、python shellの統合
shellセッションを開始するたびにデータベースインスタンスとモデルをインポートするのは面倒ですが、常にインポートしないようにFlask-Scriptのshellコマンドを使用して特定のオブジェクトを自動的にインポートできます.
from flask.ext.script import Shell
def make_shell_context():
return dict(app=app, db=db, User=User, Role=Role)
manager.add_command("shell", Sheel(make_context=make_shell_context))
make_shell_context()関数はプログラム、データベースインスタンス、モデルを登録し、shellに直接インポートできます.
11.Flask-Migrateによるデータベース移行
1、移行倉庫の作成
pip install flask-migrate
from flask.ext.migrate import Migrate, MigrateCommand
#...
migrate = Migrate(app, db)
manager.add_command('db', MigrateCommand) # manager
python model.py db init #
# migrations ,
2、移行スクリプトの作成
python model.py db migrate -m "initial migration" #
3、データベースの更新
python model.py db upgrade
この操作はまずdbを用いる.created_all()は,変更をデータに適用し,既存のデータに影響を及ぼさない.