Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- from peewee import TextField, Field
- from datetime import datetime
- db = MySQLDatabase('my_app', user='root', password='my-secret-pw',
- host='127.0.0.1', port=3306,
- field_types={'json': 'json', 'enum': 'ENUM'})
- class JSONField(TextField):
- field_type = 'json'
- def db_value(self, value):
- return json.dumps(value)
- def python_value(self, value):
- if value is not None:
- return json.loads(value)
- class EnumField(Field):
- field_type = 'enum'
- def __init__(self, values, *args, **kwargs):
- self.values = set(values)
- super(EnumField, self).__init__(*args, **kwargs)
- def __getattr__(self, name):
- if name in self.values:
- return name
- else:
- msg = (f'Requested enum value is not exists: {name}'
- f'valid values are: {self.values}')
- raise KeyError(msg)
- def get_modifiers(self):
- return {f"'{v}'" for v in self.values}
- class Person(Model):
- name = CharField()
- birthday = DateField()
- jf = JSONField()
- answer = EnumField(['yes', 'no', 'other'])
- class Meta:
- database = db
- primary_key = CompositeKey('name', 'birthday')
- db.drop_tables([Person])
- db.create_tables([Person])
- Person.create(name='ad2',
- birthday=datetime.now(),
- jf={'fdsa': 'sdf'},
- answer=Person.answer.no)
- p = Person.get(name='ad2')
- print(p.answer)
Add Comment
Please, Sign In to add comment