Package: peewee
peeweePeewee is a simple and small ORM. It has few (but expressive) concepts, making it easy to learn and intuitive to use.a small, expressive ORMpython 2.7+ and 3.4+supports sqlite, mysql, postgresql and cockroachdbtons ofextensionsNew to peewee? These may help:QuickstartExample twitter appUsing peewee interactivelyModels and fieldsQueryingRelationships and joinsExamplesDefining models is similar to Django or SQLAlchemy:frompeeweeimport*importdatetimedb=SqliteDatabase('my_database.db')classBaseModel(Model):classMeta:database=dbclassUser(BaseModel):username=CharField(unique=True)classTweet(BaseModel):user=ForeignKeyField(User,backref='tweets')message=TextField()created_date=DateTimeField(default=datetime.datetime.now)is_published=BooleanField(default=True)Connect to the database and create tables:db.connect()db.create_tables([User,Tweet])Create a few rows: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')Queries are expressive and composable:# 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)Check out theexample twitter app.Learning moreCheck thedocumentationfor more examples.Specific question? Come hang out in the #peewee channel on irc.libera.chat, or post to the mailing list,http://groups.google.com/group/peewee-orm. If you would like to report a bug,create a new issueon GitHub.Still want more info?I’ve written a number of blog posts about building applications and web-services with peewee (and usually Flask). If you’d like to see some real-life applications that use peewee, the following resources may be useful:Building a note-taking app with Flask and Peeweeas well asPart 2andPart 3.Analytics web service built with Flask and Peewee.Personalized news digest (with a boolean query parser!).Structuring Flask apps with Peewee.Creating a lastpass clone with Flask and Peewee.Creating a bookmarking web-service that takes screenshots of your bookmarks.Building a pastebin, wiki and a bookmarking service using Flask and Peewee.Encrypted databases with Python and SQLCipher.Dear Diary: An Encrypted, Command-Line Diary with Peewee.Query Tree Structures in SQLite using Peewee and the Transitive Closure Extension.