Peewee est un ORM simple et petit. Il comporte peu de concepts (mais expressifs), ce qui le rend facile à apprendre et intuitif à utiliser.
Nouveau chez pipi ? Ceux-ci peuvent aider :
La définition de modèles est similaire à Django ou SQLAlchemy :
from peewee import *
import datetime
db = SqliteDatabase ( 'my_database.db' )
class BaseModel ( Model ):
class Meta :
database = db
class User ( BaseModel ):
username = CharField ( unique = True )
class Tweet ( BaseModel ):
user = ForeignKeyField ( User , backref = 'tweets' )
message = TextField ()
created_date = DateTimeField ( default = datetime . datetime . now )
is_published = BooleanField ( default = True )
Connectez-vous à la base de données et créez des tables :
db . connect ()
db . create_tables ([ User , Tweet ])
Créez quelques lignes :
charlie = User . create ( username = 'charlie' )
huey = User ( username = 'huey' )
huey . save ()
# No need to set `is_published` or `created_date` since they
# will just use the default values we specified.
Tweet . create ( user = charlie , message = 'My first tweet' )
Les requêtes sont expressives et composables :
# A simple query selecting a user.
User . get ( User . username == 'charlie' )
# Get tweets created by one of several users.
usernames = [ 'charlie' , 'huey' , 'mickey' ]
users = User . select (). where ( User . username . in_ ( usernames ))
tweets = Tweet . select (). where ( Tweet . user . in_ ( users ))
# We could accomplish the same using a JOIN:
tweets = ( Tweet
. select ()
. join ( User )
. where ( User . username . in_ ( usernames )))
# How many tweets were published today?
tweets_today = ( Tweet
. select ()
. where (
( Tweet . created_date >= datetime . date . today ()) &
( Tweet . is_published == True ))
. count ())
# Paginate the user table and show me page 3 (users 41-60).
User . select (). order_by ( User . username ). paginate ( 3 , 20 )
# Order users by the number of tweets they've created:
tweet_ct = fn . Count ( Tweet . id )
users = ( User
. select ( User , tweet_ct . alias ( 'ct' ))
. join ( Tweet , JOIN . LEFT_OUTER )
. group_by ( User )
. order_by ( tweet_ct . desc ()))
# Do an atomic update (for illustrative purposes only, imagine a simple
# table for tracking a "count" associated with each URL). We don't want to
# naively get the save in two separate steps since this is prone to race
# conditions.
Counter . update ( count = Counter . count + 1 ). where ( Counter . url == request . url )
Consultez l'exemple d'application Twitter.
Consultez la documentation pour plus d'exemples.
Question précise ? Venez passer du temps sur la chaîne #peewee sur irc.libera.chat, ou publiez sur la liste de diffusion, http://groups.google.com/group/peewee-orm . Si vous souhaitez signaler un bug, créez un nouveau problème sur GitHub.
J'ai écrit un certain nombre d'articles de blog sur la création d'applications et de services Web avec peewee (et généralement Flask). Si vous souhaitez voir des applications réelles utilisant peewee, les ressources suivantes peuvent être utiles :