peewee中创建自己的Field,主要通过继承Field或其子类来完成
如果有mysql中对应的字段,则将其赋值给db_field即可。这里对set, enum并没有找到通用的字段定义,但是对具体的业务可以进行如GenderField这样的个性化定制。
如果没有,则使用其父类的db_field字段,并定义db_value和python_value两个方法来完成与数据库中数据类型之间的转化
# 时间戳字段
class TimeStampField(Field):
db_field = 'timestamp'
class SmallIntegerField(IntegerField):
db_field = 'smallint'
class PasswordField(FixedCharField):
def __init__(self, *args, **kwargs):
self.max_length =64
super(PasswordField, self).__init__(max_length=self.max_length, *args, **kwargs)
def db_value(self, value):
return encrypt(value)
def python_value(self, value):
return encrypt(value)
# 性别字段
class GenderField(Field):
db_field = 'enum("f", "m")'
建立表格如下:
class Base(Model):
class Meta:
database = db
class Person(Base):
name = CharField(max_length=20, default='haha')
intro = TextField(default='')
birth = DateTimeField(default=datetime.now())
Married = BooleanField(default=False)
height = FloatField(default=0)
wight = DoubleField(default=0)
salary = DecimalField(default=0)
Save = BigIntegerField(default=0)
family = SmallIntegerField(default=0)
age = IntegerField(default=0)
username = CharField(max_length=20)
password = PasswordField(default='')
ctime = TimeStampField()
today = DateField(default=datetime.date(datetime.today()))
now = TimeField(default=datetime.today())
secret = BlobField(default='')
gender = GenderField()