Skip to content

Instantly share code, notes, and snippets.

@thmsklngr
Created November 4, 2020 15:12
Show Gist options
  • Save thmsklngr/3c57ca4beacd21675646bf9681f4e965 to your computer and use it in GitHub Desktop.
Save thmsklngr/3c57ca4beacd21675646bf9681f4e965 to your computer and use it in GitHub Desktop.
Comparing PonyORM and Peewee with a simple example (using UUID4 as primary key) - ponyorm.py
import string
import secrets
from pony import orm
import uuid
database_settings = {
'host': 'localhost',
'user': 'ponyorm',
'password': 'ponyorm',
'database': 'ponyorm'
}
db = orm.Database()
def generate_password():
alphabet = string.ascii_letters + string.digits
pw = ''.join(secrets.choice(alphabet) for i in range(8))
return pw
class User(db.Entity):
id = orm.PrimaryKey(uuid.UUID, auto=True, default=uuid.uuid4)
username = orm.Required(str)
password = orm.Required(str)
firstname = orm.Optional(str)
lastname = orm.Optional(str)
roles = orm.Set('Roles')
class Roles(db.Entity):
id = orm.PrimaryKey(uuid.UUID, auto=True, default=uuid.uuid4)
name = orm.Required(str)
users = orm.Set(User)
db.bind(provider='postgres', **database_settings)
db.generate_mapping(create_tables=True)
user_data = [
{'username': 'user1', 'password': generate_password(), 'firstname': 'Hans', 'lastname': 'Fischer'},
{'username': 'user2', 'password': generate_password(), 'firstname': 'Barbara', 'lastname': 'Bleibtreu'},
{'username': 'user3', 'password': generate_password(), 'firstname': 'Günter', 'lastname': 'Müller'},
{'username': 'user4', 'password': generate_password(), 'firstname': 'Johanna', 'lastname': 'Kardic'}
]
role_data = ['admin', 'user', 'editor', 'moderator']
roles = [
{'username': 'user1', 'roles': ['user', 'admin']},
{'username': 'user2', 'roles': ['user', 'moderator']},
{'username': 'user3', 'roles': ['user', 'editor']},
{'username': 'user4', 'roles': ['user']}
]
with orm.db_session:
for user in user_data:
User(**user)
for role in role_data:
Roles(name=role)
db.commit()
for line in roles:
user = User.select(lambda u: u.username == line['username']).first()
for role in line['roles']:
role_to_add = Roles.select(lambda r: r.name == role).first()
user.roles.add(role_to_add)
db.commit()
user1 = User.select(lambda u: u.username == 'user1').first()
for r in [role.name for role in user1.roles.select()[:]]:
print(r)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment