python ORM 模块peewee(三): Model的建立
2017-06-10 17:04
197 查看
首先,需要理清一下python数据与数据库数据是怎么对应的:
Model类:表
Field类:表上的列的类型
Model实例:表上的一行数据
1.
这里主要是需要对Model类中的Meta类的定义规范进行小结:
当Meta类建立后,不应该通过
Meta的可用属性有:
除了
可以看到,peewee的主键,索引和其他约束均可以在meta中定义。
主键的定义
非整型的主键
当主键为非
添加索引
单列索引
多列索引
2.
Filed在peewee.py中有基本数据类型的定义
在playhouse.fields中定义的额外字段
包括
然而peewee中并不推荐使用这些Field, 例如ManyToManyField,完全可以用一个含两个外键的关系表来维护,ManyToMany关系在ORM中实际上也正是这样来实现的,并且使用这种方式可以描述更加复杂的关系。
自定义field字段
Model类:表
Field类:表上的列的类型
Model实例:表上的一行数据
1. Model Class
主要描述的是数据表以及其继承的顺序
这里主要是需要对Model类中的Meta类的定义规范进行小结:当Meta类建立后,不应该通过
mymodel.Meta来进行访问,而应该使用
mymodel._meta, 这是一个
ModelOption类的实例, 可以通过它获取model和Meta的一些属性
Meta的可用属性有:
除了
db_table和
table_alias之外,其他的字段均可以被继承
可以看到,peewee的主键,索引和其他约束均可以在meta中定义。
主键的定义
class mymodel1(Model): name = CharField(max_length=200, primary_key=True) #将该字段设为主键 class mymodel2(Model): name = CharField(max_length=200) Meta: # 如果要不使用主键 primary_key = False class mymodel3(Model): blog = ForeignKeyField(Blog) tag = ForeignKeyField(Tag) class Meta: primary_key = CompositeKey('blog', 'tag') # primary_key实际上是CompositeKey的一个实例
非整型的主键
当主键为非
auto_increment时,插入数据调用save()会出错,应该调用
save(force_insert=True)
添加索引
单列索引
多列索引
2. Field Class
主要描述python数据类型与数据库数据类型的对应关系和数据表之间的关系(外键,多对多)
Filed在peewee.py中有基本数据类型的定义# 初始化函数,各个字段的默认值 def __init__(self, null=False, index=False, unique=False, verbose_name=None, help_text=None, db_column=None, default=None, choices=None, primary_key=False, sequence=None, constraints=None, schema=None)
在playhouse.fields中定义的额外字段
包括
PasswordField ManyToManyField CompressedField PickledField AESEncryptedField
然而peewee中并不推荐使用这些Field, 例如ManyToManyField,完全可以用一个含两个外键的关系表来维护,ManyToMany关系在ORM中实际上也正是这样来实现的,并且使用这种方式可以描述更加复杂的关系。
自定义field字段
# 1. 定义MyField类 class MyField(Field): # Field的标签 db_field = 'my' # 返回数据库类型的值 def db_value(value): pass # 返回python类型的值 def python_value(value): pass # 2. 将自定义Field子类与数据表中的列关联,有两种方法: # 1. 创建数据库时,给fields字段赋值 db = MySQLDatabase('my_db', fields={'my': 'my'}) # 2. 调用register_fields函数 db.register_fields({'my':'my'})
相关文章推荐
- python ORM 模块peewee(三): Model的建立
- python ORM 模块peewee(一): 建立数据库对象
- python ORM 模块peewee(一): 建立数据库对象
- python ORM 模块peewee(二): 数据库使用的基本流程
- python ORM 模块peewee(四): Model类源码初探
- python ORM 模块peewee(二): 数据库使用的基本流程
- 利用Python的Django框架中的ORM建立查询API
- Python中peewee模块(二)
- python轻量级ORM---peewee
- python simple and small ORM Peewee(矮小的) 入门篇
- Python基础-项目-day4 model 建立数据库表名
- 使用python建立数据层模块,致敬廖雪峰老师
- Python(SQLAlchemy-ORM)模块之mysql操作
- Python3 sqlacodegen 根据已有数据库生成 ORM 使用的 model.py
- Python中peewee模块(一)
- Python中的ORM使用之peewee
- Python3 初学实践案例(9)sqlacodegen 根据已有数据库生成 ORM 使用的 model.py
- python轻量级ORM---peewee之API
- Python菜鸟之路:Django 路由、模板、Model(ORM)
- python 中模块(model)概念的引入 以及 函数变量的作用域