Flask-SQLAlchemyメモ
はじめに
この前Webアプリを書いた時にFlask-SQLAlchemy使ったので忘れないうちにメモ。
DBの設定・作成
from flask import Flask from flask.ext.sqlalchemy import SQLAlchemy app = Flask(__name__) app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:////tmp/test.db' db = SQLAlchemy(app)
上のようにSQLALCHEMY_DATABASE_URIに値をセットし、dbインスタンスを作成すれば準備OK。
テーブルの定義
class User(db.Model): __tablename__ = 'users' id = db.Column(db.Integer, primary_key = True) name = db.Column(db.String(64)) email = db.Column(db.String(64), unique=True) pwdhash = db.Column(db.String(54)) def __init__(self, name, email, password): self.name = name self.email = email self.set_password(password) def __repr__(self): return '<User %r>' % self.name def set_password(self, password): self.pwdhash = generate_password_hash(password) def check_password(self, password): return check_password_hash(self.pwdhash, password)
ユーザ情報を管理するテーブルを↑のように定義したとき、次のように扱っていきます。ちなみに__repr__
メソッドは、printした時にobject-idではなくユーザ名などを表示するために使えます。定義しておくとデバッグ時に便利です。
その他 https://pythonhosted.org/Flask-SQLAlchemy/models.html
型 | 説明 |
---|---|
Integer | an integer |
String (size) | a string with a maximum length |
Text | some longer unicode text |
DateTime | date and time expressed as Python datetime object. |
Float | stores floating point values |
Boolean | stores a boolean value |
PickleType | stores a pickled Python object |
LargeBinary | stores large arbitrary binary data |
テーブルの作成
テーブルの作成はたいていの場合、デプロイした後に1回行ってしまえばいいので、デプロイ先にsshで起動して、pythonのインタプリタから直接行う。
>>> from app import db >>> db.create_all()
ちなみにテーブルを削除したい時は
$ python >>> from app import db >>> db.drop_all()
Flaskのコードを読んでいると下のように記述している方も居ました。
@app.before_first_request def init(): db.create_all()
挿入・削除・更新
挿入
user = User('userA', 'user-a@example.com', 'user_a_password') db.session.add(user) db.session.commit()
削除
user = db.session.query(User).filter_by(name='userA').first()
db.session.delete(user)
db.session.commit()
更新
user = db.session.query(User).filter_by(name='userA').first() user.name = "user_a" db.session.flush()
今後の課題
- リレーションの定義についてもう少し理解する
- データベースのマイグレーション
まだまだ勉強不足なので、ある程度理解したらまた記事にします。
参考
Flask Web Development: Developing Web Applications with Python
- 作者: Miguel Grinberg
- 出版社/メーカー: O'Reilly Media
- 発売日: 2018/03/25
- メディア: ペーパーバック
- この商品を含むブログ (1件) を見る