Peewee هو ORM بسيط وصغير. تحتوي على عدد قليل من المفاهيم (ولكنها معبرة)، مما يجعلها سهلة التعلم وسهلة الاستخدام.
جديد على بيوي؟ هذه قد تساعد:
تحديد النماذج يشبه Django أو 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 )
الاتصال بقاعدة البيانات وإنشاء الجداول:
db . connect ()
db . create_tables ([ User , Tweet ])
إنشاء بضعة صفوف:
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' )
الاستعلامات معبرة وقابلة للتركيب:
# 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 )
تحقق من مثال تطبيق تويتر.
تحقق من الوثائق لمزيد من الأمثلة.
سؤال محدد؟ تفضل بالاشتراك في قناة #peewee على irc.libera.chat، أو قم بالنشر في القائمة البريدية، http://groups.google.com/group/peewee-orm. إذا كنت ترغب في الإبلاغ عن خطأ ما، فقم بإنشاء مشكلة جديدة على GitHub.
لقد كتبت عددًا من منشورات المدونات حول إنشاء التطبيقات وخدمات الويب باستخدام peewee (وعادةً Flask). إذا كنت ترغب في رؤية بعض التطبيقات الواقعية التي تستخدم peewee، فقد تكون الموارد التالية مفيدة: