peewee
3.17.8
Peewee เป็น ORM ที่เรียบง่ายและเล็ก มีแนวคิดเพียงเล็กน้อย (แต่แสดงออกได้ชัดเจน) ทำให้ง่ายต่อการเรียนรู้และใช้งานง่าย
ใหม่เพื่อ peewee? สิ่งเหล่านี้อาจช่วยได้:
การกำหนดโมเดลคล้ายกับ 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 )
ลองดูตัวอย่างแอป Twitter
ตรวจสอบเอกสารประกอบเพื่อดูตัวอย่างเพิ่มเติม
คำถามเฉพาะ? มาร่วมสังสรรค์ในช่อง #peewee บน irc.libera.chat หรือโพสต์ในรายชื่ออีเมล http://groups.google.com/group/peewee-orm หากคุณต้องการรายงานจุดบกพร่อง ให้สร้างปัญหาใหม่บน GitHub
ฉันได้เขียนบล็อกโพสต์เกี่ยวกับการสร้างแอปพลิเคชันและบริการบนเว็บด้วย peewee (และโดยทั่วไปคือ Flask) หากคุณต้องการดูแอปพลิเคชันในชีวิตจริงที่ใช้ peewee แหล่งข้อมูลต่อไปนี้อาจมีประโยชน์: