Python3 Bottleフレームワーク入門(その4)- ORM Peewee CRUD
2017年8月25日Python Bottle Framework, トピックス
peeweeの続編です。前回では特定のデータを取得してWEBに表示するところまで行いましたが、今回は様々なパターンを実行してみたいと思います。
データベースから条件で抽出、条件で削除、条件でアップデート。表の結合(Join)の簡単なものを例に挙げます。
※テスト用に使うサンプルデータベースのimportファイルです。テストデータはご自分で入れてください。
MySQLテストインポートファイルデータのアップデート
既にあるフィールドを修正するケースです。まず最初に修正するレコードを探してそのポインターの変数を修正データに書き換えるという処理になります。下記はユーザ名(kasuo)を探してパスワードを書き換えています。
1 2 3 |
update = User.get(User.name=='kazuo') update.passwd = 'hareruya5511' update.save() |
データの削除
指定したユーザの削除を行います。アップデート同様に特定ユーザを探して削除します。
1 2 |
deluser = User.get(User.name=='kazuo') deluser.delete_instance() |
データを全部取得し表示
1 2 |
for person in User.select(): print( person.name , person ) |
UserとRoleテーブルを結合し出力
下記反転箇所でわかるように通常のSQL文を記述するよりも遥かにわかり易く記述が行える。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 |
from peewee import * database = MySQLDatabase('user_db', **{'user': 'root', 'host': 'localhost', 'password': 'test01'}) class UnknownField(object): def __init__(self, *_, **__): pass class BaseModel(Model): class Meta: database = database class User(BaseModel): name = CharField(unique=True) passwd = CharField() role = IntegerField() class Meta: db_table = 'user' class Role(BaseModel): role_name = CharField(unique=True) role_id = IntegerField(unique=True) class Meta: db_table = 'role' database.connect() joint = (User.role == Role.role_id) #結合条件を指定 query = User.select(User,Role).join(Role,on=joint).order_by(User.id) for data in query: #クエリー結果を展開 print(data.id,data.name,data.role.role_name) database.close() |
◯ 実行した結果は次のようになりました。
1 2 3 4 5 6 7 8 9 10 |
(newdev) [user01@xordes bdtest]$ python test.py 1 田岡光一 people 13 鈴木雄大 people 14 山田康之 admin 15 原田駿佑 admin 16 江川逞 admin 17 恵比寿大貴 admin 20 高市司 editor 21 湊修二 people 22 引田天功 admin |
トランザクション処理の例
データベース書き込みでエクセプションエラーが発生した場合はロールバックが行われます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
try: database.create_tables([User, Role], True) #テーブルの自動生成 with database.transaction(): update = User.get(User.name=='田中光一') update.passwd = 'Yhdg745G%5cB' update.save() deluser = User.get(User.name=='湊修二') deluser.delete_instance() database.commit() except IntegrityError as e: print (e) database.rollback() |
合わせて呼んで欲しい記事
★Python MySQLデータベース操作その1
★Python MySQLデータベース操作その2
- Python Bottle Framework入門 全13回
- 1.基礎編サーバ起動
- 2.リクエストメソッド
- 3.ORM Peewee (MySQL)
- 4.ORM Peewee CRUD
- 5.Cookie And Session
- 6.Abort and Redirect
- 7.マルチスレッドWEBサーバ
- 8.デーモン化
- 9.Json
- 10.WSGI on SSL
- 11.Apache連携起動(外部WSGI) SSL接続
- 12.Apache連携起動(ReverseProxy)SSL接続
- 13.hprox連携起動(ReverseProxy)SSL接続&HTTP2対応