python ORM 模块peewee(三): Model的建立
首先,需要理清一下python数据与数据库数据是怎么对应的:
- 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 = Falseclass 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中定义的额外字段
包括
PasswordFieldManyToManyFieldCompressedFieldPickledFieldAESEncryptedField
然而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问题】Python 导入模块的三种方式ModuleNotFoundError: No module named ‘模块名‘
Python 导入模块的三种方式ModuleNotFoundError: No module named '模块名' 问题 一.Python解释器查找模块文件的过程. 二.解决方法 记录一下 大家可以 ...
- Python ORM框架peewee
文章目录 简介 安装 初试 表的创建和插入数据 INSERT INTO ... VALUES (...) 表的删除 DROP TABLE 表的更新 ALTER TABLE 表的查询 SELECT .. ...
- python导入模块的三种方法,例子: import numpy和from numpy import * (import matplotlib 和 from matplotlib import *)
python导入模块有如下几种写法:以matplotlib为例 (跟numpy是一样的) 1,import matplotlib #整个导入matplotlib 2 , from matplotlib ...
- Python ORM之peewee模块
由于peewee用起来比较简单 , 所以了解了一下 以Python内置的数据库SQLite为例 python3.7版本 1 import peewee 2 conn = peewee.SqliteD ...
- 【ORM框架】Python ORM框架——peewee(详细)
文章目录 前言 一.peewee的安装和入门 1.字段类型表&Meta类型表&类型属性表 字段类型表 Meta类型表 类型属性表 2.设计表结构 防止连接丢失 二.表的设计&操 ...
- Python random 模块 - Python零基础入门教程
目录 一.Python random 模块常用函数介绍 二.Python random 模块使用 三.猜你喜欢 零基础 Python 学习路线推荐 : Python 学习目录 >> Pyt ...
- Python sys模块 - Python零基础入门教程
目录 一.Python sys 模块简介 二.Python sys 模块使用 三.猜你喜欢 零基础 Python 学习路线推荐 : Python 学习目录 >> Python 基础入门 在 ...
- Python ORM框架之 Peewee入门
之前在学Django时,发现它的模型层非常好用,把对数据库的操作映射成对类.对象的操作,避免了我们直接写在Web项目中SQL语句,当时想,如果这个模型层可以独立出来使用就好了,那我们平台操作数据库也可 ...
- Python轻量级ORM框架——peewee
这里写目录标题 Python中常用的ORM框架 peewee使用经验 从数据库中导出模型 查询 统计类查询 优化子查询 参考文章 Python中常用的ORM框架 SQLALchemy:重量级框架,适合 ...
- 中文自然语言处理(NLP)(三)运用python jieba模块计算知识点当中关键词的词频
前两次链接:中文自然语言处理(NLP)(一)python jieba模块的初步使用 中文自然语言处理(NLP)(二)python jieba模块的进一步学习和xlrd模块 续上次的随笔之后 ...
最新文章
- 作为一名合格的JAVA程序员需要点亮那些技能树
- Leecode 301. 删除无效的括号——Leecode每日一题系列
- MyBatis(三)
- 我大学期间看的好书推荐
- 将指定excel的一列数据提取到另一个excel的指定列
- MongoDB 数据迁移 备份 导入(自用)
- c# 十六进制转为字节_如何在C#中将具有十六进制内容的字节数组转换为具有十进制的字符串...
- 计算机视觉CV:图像处理面试题
- mysql left join右边有多条_left join 右表多条数据重复
- ppt设置外观样式_ppt设置主题样式的方法步骤详解
- 数字图像处理课程作业1-大米检测
- 计算机组策略没有权限,运行组策略或程序时提示没有权限
- php简单实现延迟队列
- 后端开发面试自我介绍_java工程师面试自我介绍范文
- arg min什么意思
- freemarker导出excel单元格内换行
- 视频号运营玩法;以及视频号引流变现赚钱。丨国仁网络资讯
- Linux系统调用详解(实现机制分析)--linux内核剖析(六)
- explicit的作用
- 大数据架构师之路-大数据框架大全
热门文章
- 超出部分点点点,并修改点点点颜色
- My Sixty-Second Page - 斐波那契数列 - By Nicolas
- Android强制系统横屏的原理和实现
- cocoa touch
- 求助,nodejs 在安装threads_a_gogo时报错
- 软件测试工程师必备技能
- 12 Best Custom ROMs for Android You Can Install
- IBM power小型机HMC管理口默认IP地址和ASMI默认密码
- 海康威视录像机刷linux系统,海康硬盘录像机怎么刷机?详尽图文刷机教程刷机工具亲测100%好用...
- Python爬虫-爬取开心网主页(有登录界面-利用cookie)