SQLAlchemyとpeeweeの比較
とりあえず導入部分だけざっくりと。
データベースへの接続
SQLAlchemy
from sqlalchemy import create_engine engine = create_engine('sqlite:///:memory:', echo=True)
モデルの定義
SQLAlchemy
from sqlalchemy import Column, Integer, String, BOOLEAN from sqlalchemy.ext.declarative import declarative_base Base = declarative_base() class User(Base): __tablename__ = 'users' id = Column(Integer, primary_key=True) username = Column(String) password = Column(String) active = Column(BOOLEAN) def __init__(self, username, password): self.username = username self.password = password self.active = True def __repr__(self): return "<User('%s', '%s')>" % (self.username, self.password)
primary_keyは自動生成されないので自身で定義。
コンストラクタはdefaultで提供されているが、上記のようにオーバーライド可能。
peewee
import peewee class Base(peewee.Model): class Meta: database = engine class User(Base): username = peewee.CharField() password = peewee.CharField() active = peewee.BooleanField(default=True)
データベース・テーブルの作成
SQLAlchemy
Base.metadata.create_all(engine)
peewee
User.create_table()
クラスにマッピングされたインスタンスを生成
SQLAlchemy
>>> kk6 = User('kk6', 'kk6password') >>> kk6.username 'kk6' >>> kk6.password 'kk6password'
peewee
>>> kk6 = User.create(username='kk6', password='kk6password') >>> kk6.username 'kk6' >>> kk6.password 'kk6password'
peeweeの場合は
User.create(cls, **query)
という実装になっているのでキーワード引数を指定してやる。
データベースへの書き込み
SQLAlchemy
>>> from sqlalchemy.orm import sessionmaker >>> Session = sessionmaker(bind=engine) >>> session = Session() >>> session.add(kk6)
peewee
>>> kk6.save()
データベースの参照
SQLAlchemy
>>> output = session.query(User).filter_by(active=True).first() >>> output <User('kk6', 'kk6password')>
peewee
>>> output = User.filter(active=True)
>>> output.get(username='kk6')
<User: <kk6>>