Peewee进阶

2023-10-27

Part1前言

接上篇文章,如果我们想要修改表结构或者字段属性该如何操作呢?带着这个问题,今天我们就一起来了解 peewee 的进阶操作。

Part2关于 playhouse

peewee 有很多的扩展,这些扩展都集中收录在 playhouse 中,例如支持多线程的 SqliteQueueDatabase,支持 migration,今天我们主要就数据库同步进行介绍。

Part3实例

现存的数据库结构如下:

一个库+1个表

1添加列

# 实例化migrate对象
mgrt = SqliteMigrator(db)

# 定义数据类型
home_filed = CharField(max_length=10,null=True)

# 执行migrate
migrate(
    # 添加列
    mgrt.add_column(table='people',column_name='home',field=home_filed),
)
添加的列

2刪除列

# 实例化migrate对象
mgrt = SqliteMigrator(db)

# 定义数据类型
home_filed = CharField(max_length=10,null=True)

# 执行migrate
migrate(
    # 添加列
    # mgrt.add_column(table='people',column_name='home',field=home_filed),
    # 删除列
    mgrt.drop_column(table='people',column_name='people_status'),
)
people_status列已经被删除

3重命名列

# 实例化migrate对象
mgrt = SqliteMigrator(db)

# 定义数据类型
home_filed = CharField(max_length=10,null=True)

# 执行migrate
migrate(
    # 添加列
    # mgrt.add_column(table='people',column_name='home',field=home_filed),
    # 删除列
    # mgrt.drop_column(table='people',column_name='people_status'),
    # 重命名列
    mgrt.rename_column(table='people',old_name='name',new_name='people_name')
)
列名被修改

重命名后一定记得修改数据模型中的列名。

新的数据模型

class people(Model):
    # 默认会有ID作为主键自增
    people_name = CharField()
    birth = DateField()
    #people_status = BooleanField(default=True)
    home = CharField(max_length=10,null=True)
    class Meta:
        database = db

4设置不为空属性

# 实例化migrate对象
mgrt = SqliteMigrator(db)

# 给home值

pps = people.select()
for i in pps:
    i.home='china'
    i.save()


# 执行migrate
migrate(
    # 添加列
    # mgrt.add_column(table='people',column_name='home',field=home_filed),
    # 删除列
    # mgrt.drop_column(table='people',column_name='people_status'),
    # 重命名列
    # 重命名后一定记得修改数据模型中的列名
    # mgrt.rename_column(table='people',old_name='name',new_name='people_name')

    # 设置(不)为空
    # @@@ 因为初始的home是可以为空的,且数据库中的数据home是空
    # @@@ 所以要先给home给值,然后才能设置不为空的属性,否则会报错
    mgrt.add_not_null(table='people',column='home')
)
home添加的数据
添加的不为空属性已生效

5设置可为空

mgrt.drop_not_null(table='people',column='home')
NOT NULL属性已经去除

6重命名表名

同修改列名,修改表名后记得同步修改数据模型。

mgrt.rename_table(old_name='people', new_name='people_v2')
表名已经被修改

7索引的增删

增加索引

mgrt.add_index(table='people_v2',columns='id',unique=True)
)
添加的索引

删除索引

# 索引名为{表名_列名}
mgrt.drop_index(table='people_v2',index_name='people_v2_id')
索引被删除

更多内容详见:

http://docs.peewee-orm.com/en/latest/peewee/playhouse.html#schema-migrations

以上就是今天的全部内容了,感谢您的阅读,我们下节再会。

往期推荐

Peewee | 优雅的ORM框架!

肾模?你还不会sqlalchemy!【SQLite】

这个小工具竟然可以让我保持健康

经典实践 | 网速测速小工具(上)

经典实践 | 网速测速小工具(下)

Schedule | 轻量化的定时任务框架

Partial | 超有用的偏函数

PyWebIo | 快速构建web应用

5分钟带你了解Scrum

5分钟学会本地Pypi源搭建

点个

在看

你最好看

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Peewee进阶 的相关文章

随机推荐

  • React 回调函数传默认值和自定义参数

    利用箭头函数 e为默认参数 arg为自定义参数 onTouchStart e gt this touchS e arg
  • SpringBoot用注解实现redis缓存

    1 入口类加注解 EnableCaching EnableRetry 重试 SpringBootApplication MapperScan cn my dao EnableCaching 开启redis缓存 EnableSchedulin
  • Qt之自定义信号

    widget h如下 ifndef WIDGET H define WIDGET H include
  • 认真分析mmap:是什么 为什么 怎么用

    阅读目录 mmap基础概念 mmap内存映射原理 mmap和常规文件操作的区别 mmap优点总结 mmap相关函数 mmap使用细节 回到顶部 mmap基础概念 mmap是一种内存映射文件的方法 即将一个文件或者其它对象映射到进程的地址空间
  • uni-app 支持 app端, h5端,微信小程序端 图片转换文件格式 和 base64

    uni app 支持 app端 h5端 微信小程序端 图片转换文件格式 和 base64 下方是插件市场的地址app端 h5端 微信小程序端 图片转换文件格式 和 base64 DCloud 插件市场 https ext dcloud ne
  • JAVA - 大批量集合数据多线程处理

    原因 最近写项目多时候遇到一个这样的问题 Excel批量导入表格 数据量较大 处理时间较长 然后小编想到了可以用多线程处理 例 导入失败集合 List
  • mysql修改字符集_修改mysql默认字符集的两种方法详细解析

    1 最简单的修改方法 就是修改mysql的my ini文件中的字符集键值 如 default character set utf8 character set server utf8 修改完后 重启mysql的服务 service mysq
  • WARNING: Ignoring invalid distribution

    WARNING Ignoring invalid distribution 目录地址 根据提示到指定目录地址中删除 开头的文件 一般是由于下载过程中异常终止导致的
  • R及R包的安裝、更新及版本查询

    1R包的安裝 1 安裝来自CRAN的R包 install packages openxlsx 2 手动从网上搜索到下载 zip 或 tar gz 文件到本地 再手动安装 download the source file download f
  • c++基础

    1 打印三角形 求和 99乘法表 判断质数 if 0 include
  • 论文精读:Ansor: Generating High-Performance Tensor Programs for Deep Learning

    文章目录 1 Abstract 2 Introduction 3 Background 4 Design Overview 5 Program Sampling 5 1 Sketch Generation 5 2 Random Annota
  • 最近成了三等奖专业户

    最近连续收到三等奖证书若干 最欣慰的是蓝桥杯省赛scratch三等奖 小妞水平也就那样 她从市赛的优秀奖 四等奖 到省赛的三等奖 居然还进步了 老母亲知足了 scratch主要是因为我自己水平有限 没办法高效辅导她 有可能就止步于此 NOC
  • 数据结构期末复习题(线性表 链表)

    目录 线性表 1 用已有数组创建顺序表 2 用键盘输入的方式创建顺序表 3 输出顺序表各元素 4 在顺序表某一个位置插入一个元素 5 在顺序表某一个位置删除一个元素 6 查找顺序表上某个位置的元素并输出 7 查找顺序表上某个数的位置并输出
  • File I/O总结

    一 File类的常用方法 1 boolean exists 判断文件或目录是否存在 2 boolean isFile 判断是否是文件 3boolean isDirectory 判断是否是目录 4 String getPath 返回此对象表示
  • solidity经典案例----拍卖

    Solidity经典合约案例 拍卖 1 案例分析 2 具体的代码 pragma solidity 0 6 1 contract aution demo address payable public seller 卖方 address pay
  • 110道python面试笔试题汇总

    看到一篇python 基础面试练习题文章 有必要面试前做一下 转至 https blog csdn net weixin 40907382 article details 80621513 1 一行代码实现1 100之和 利用sum 函数求
  • Less-7(文件读写操作)

    文章目录 OUTFILE注入 实战 1 关卡分析 2 过关斩将 2 1 secure file priv 2 2 注入过程 load file的使用 SQLmap OUTFILE注入 在前面的学习中 我们知道了sql注入中的盲注和双注入是个
  • CentOS 代理 proxy设置方法

    说明 为什么说是http代理 其实这个还不能说是全称走代理 罪名写的区别就是ICMP协议这个设置就无效 只能说是90 的应用都可以使用这个设置来实现代理访问 只有个别不行 比如一些软件根本不走http协议的 那么此种方法绝对不行 下面是讲解
  • 利用VC++编程实现程序自动启动

    摘要 在工作中经常遇到一些程序 当计算机启动时会自动将该程序加载 以实现对计算机的监控等特殊的目的 本文就针对这个问题 阐述了系统加载特定程序的原理和方法 同时利用VC 6 0编程实现这种特定的功能的 并对其中的关键代码进行了分析 工作中经
  • Peewee进阶

    Part1前言 接上篇文章 如果我们想要修改表结构或者字段属性该如何操作呢 带着这个问题 今天我们就一起来了解 peewee 的进阶操作 Part2关于 playhouse peewee 有很多的扩展 这些扩展都集中收录在 playhous