Peewee adalah ORM sederhana dan kecil. Konsepnya sedikit (tetapi ekspresif), membuatnya mudah dipelajari dan intuitif untuk digunakan.
Baru mengenal peeeee? Ini mungkin membantu:
Mendefinisikan model mirip dengan Django atau 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 )
Hubungkan ke database dan buat tabel:
db . connect ()
db . create_tables ([ User , Tweet ])
Buat beberapa baris:
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' )
Kueri bersifat ekspresif dan dapat disusun:
# 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 )
Lihat contoh aplikasi Twitter.
Periksa dokumentasi untuk contoh lainnya.
Pertanyaan spesifik? Ayo nongkrong di saluran #peewee di irc.libera.chat, atau posting ke milis, http://groups.google.com/group/peewee-orm . Jika Anda ingin melaporkan bug, buat masalah baru di GitHub.
Saya telah menulis sejumlah postingan blog tentang membangun aplikasi dan layanan web dengan peewee (dan biasanya Flask). Jika Anda ingin melihat beberapa aplikasi kehidupan nyata yang menggunakan peewee, sumber daya berikut mungkin berguna: