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