Skip to content

Instantly share code, notes, and snippets.

@thmsklngr
Last active November 4, 2020 15:09
Show Gist options
  • Save thmsklngr/aad23950293ad2a8650896ee498d5f43 to your computer and use it in GitHub Desktop.
Save thmsklngr/aad23950293ad2a8650896ee498d5f43 to your computer and use it in GitHub Desktop.
Comparing PonyORM and Peewee with a simple example (using UUID4 as primary key) - peewee.py
import string
import secrets
import peewee as pw
import uuid
database_settings = {
'host': 'localhost',
'user': 'peewee',
'password': 'peewee'
}
db = pw.PostgresqlDatabase('peewee', **database_settings)
def generate_password():
alphabet = string.ascii_letters + string.digits
pw = ''.join(secrets.choice(alphabet) for i in range(8))
return pw
class Basemodel(pw.Model):
class Meta:
database = db
class Users(Basemodel):
id = pw.UUIDField(primary_key=True, default=uuid.uuid4)
username = pw.CharField(null=False, index=True)
password = pw.CharField(null=False, default=generate_password())
firstname = pw.CharField()
lastname = pw.CharField()
class Roles(Basemodel):
id = pw.UUIDField(primary_key=True, default=uuid.uuid4)
name = pw.CharField()
class UserRoles(Basemodel):
user = pw.ForeignKeyField(Users, backref='roles')
role = pw.ForeignKeyField(Roles, backref='users')
class Meta:
table_name = 'users_roles'
db.connect()
db.create_tables([Users, Roles, UserRoles])
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']}
]
for user in user_data:
Users.insert(**user).execute()
for role in role_data:
Roles.insert(name=role).execute()
db.commit()
for line in roles:
user = Users.get(Users.username == line['username'])
for role in line['roles']:
UserRoles.insert(user=user, role=Roles.get(Roles.name == role)).execute()
db.commit()
user1 = Users.get(Users.username == 'user1')
for r in [role.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