PythonでMySQLを使うならoratorがすごくおすすめ(ActiveRecord・ORM)

Pythonのpymysqlはクエリー書くのがめっちゃめんどくさい

PythonでMySQLにデータを保存するときにpymysqlを利用していました。
追加・変更・削除などできるのですがめっちゃめんどくさいです。

PHPで例えるとmysql_connectを使っているのと同じです。
自動コミットじゃないので自動コミットするように宣言したり実行宣言したりと大変です。

自分でActiveRecordっぽいものを作ってみましたが微妙過ぎる。。

ActiveRecordっぽいことしてくれるものがないか調べたところありました!!

それがorator

oratorはオブジェクト関係マッピング(ORM)でActiveRecordのように操作することができます。

oratorなら追加・更新・削除がすっきり書ける

oratorはPHPフレームワークのLaravelにインスパイヤされているため
Laravelを使っていた方ならとても入りやすいと思います。(初心者でも楽々にできますが。。)
MySQL、Postgres,Sqliteがサポートされています。

oratorの使い方(MySQL編)

参考:orator

1. まずはoratorをpipでインストールします。

pip install orator

2. oratorで追加・削除・変更するためにsamplesというテーブルを作成する


CREATE TABLE samples (
id int(3) NOT NULL,
name varchar(100) NOT NULL,
created_at datetime NOT NULL,
updated_at datetime NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

ALTER TABLE samples ADD PRIMARY KEY (id);
ALTER TABLE samples MODIFY id int(3) NOT NULL AUTO_INCREMENT;

3. oratorでMySQLに接続設定をする

※タブがきちんとされてないので調整してください。。

from orator import DatabaseManager, Model

config = {
‘mysql’: {
‘driver’: ‘mysql’,
‘host’: ‘localhost’,
‘database’: ‘hoge’,
‘user’: ‘root’,
‘password’: ‘root’,
‘prefix’: ”
}
}
db = DatabaseManager(config)

4. oratorで追加・削除するときの注意点

テーブルのカラムに「created_at」「updated_at」が必須です。
上記カラムがないとエラーで先に追加・更新することはできません。

5. データベーステーブルをモデル化する

下記コードはsamplesテーブルの定義です。
なにも設定されていないのでなんでも追加・変更・削除できてしまいます。
カラムの制限する処理は割愛します。

class User(Model):
__table__ = 'samples'

6. oratorでMySQLを追加する

【モデルを利用しない更新方法】
samplesテーブルにname=’John’でレコード追加するコード
db.table('users').insert(name='fuga')

【モデルを利用した更新方法】
samplesテーブルにname=’John’でレコード追加するコード
さきほど作ったモデルのUserを呼び出してsamplesテーブルを見にいっています。

user = User()
user.name = 'John'
user.save()

7. oratorでMySQLを更新する

【モデルを利用しない更新方法】
samplesテーブルのid=1のname=’hoge’に変更するコード
db.table('samples').where('id', 1).update(name='hoge')

【モデルを利用した更新方法】
samplesテーブルのid>100のname=’hoge’に変更するコード
User.where('id', '>', 100).update(name='hoge')

8. oratorでMySQLを削除する

【モデルを利用しない更新方法】
samplesテーブルのid=4を削除するコード

db.table('samples').where('id', 4).delete()

【モデルを利用した更新方法】
samplesテーブルのid>100を削除するコード
User.where('id', '>', 100).delete(name='hoge')

8. oratorでMySQLを検索する


user = User.find(1)
print(user.name)

あとがき

とても便利で簡単です。詳しい操作方法については下記リンクで確認してください。
oratorでテーブル作成できたりカラム制限などもできます。PythonでMySQLを使うならoratorで間違いなしです!!

参考:orator