Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- pony.orm.select(u for u in User if u.available and u.friends > 0 and ...)
- from datetime import datetime, timedelta
- from pony.orm import *
- db = Database('sqlite', ':memory:')
- class User(db.Entity):
- username = Required(str, unique=True)
- password = Required(str)
- friends = Set("User", reverse='friends') # many-to-many symmetric relation
- online = Required(bool, default=False) # if user is currently online
- last_visit = Optional(datetime) # last visit time
- disabled = Required(bool, default=False) # if user is disabled by administrator
- sql_debug(True)
- db.generate_mapping(create_tables=True)
- def active_users():
- return User.select(lambda user: not user.disabled)
- def active_users():
- return select(u for u in User if not user.disabled)
- users = active_users().filter(lambda user: user.name.startswith('A'))
- .order_by(User.name)[:10]
- def recent_users(days=1):
- return active_users().filter(lambda u: u.last_visit > datetime.now() - timedelta(days))
- def users_with_at_least_n_friends(n=1):
- return active_users().filter(lambda u: count(u.friends) >= n)
- def online_users():
- return User.select(lambda u: u.online)
- def online_users_with_at_least_n_online_friends(n=1):
- return online_users().filter(lambda u: count(f for f in u.friends if f.online) >= n)
- users = online_users_with_at_least_n_online_friends(n=10)
- .order_by(User.name)[:10]
- class User(db.Entity):
- username = Required(str, unique=True)
- ...
- @classmethod
- def name_starts_with(cls, prefix):
- return cls.select(lambda user: not user.disabled
- and user.name.startswith(prefix))
- ...
- users = User.name_starts_with('A').order_by(desc(User.last_visit))[:10]
- def select_active(cls):
- return cls.select(lambda obj: not obj.deleted)
- select_active(Message).filter(lambda msg: msg.author == current_user)
- def active_users():
- return User.select(lambda user: not user.disabled)
- def name_starts_with(query, prefix):
- return query.filter(lambda user: user.name.startswith('prefix'))
- users1 = name_starts_with(active_users(), 'A').order_by(User.last_visited)
- users2 = name_starts_with(recent_users(), 'B').filter(lambda user: user.online)
- select(u for u in User).recent(days=3).name_starts_with('A')[:10]
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement