前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >peewee优雅的ORM框架-进阶

peewee优雅的ORM框架-进阶

作者头像
Python研究所
发布2022-06-17 08:39:02
4850
发布2022-06-17 08:39:02
举报
文章被收录于专栏:大飞的部落阁大飞的部落阁

前言

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

关于 playhouse

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

实例

现存的数据库结构如下:

一个库+1个表
一个库+1个表

添加列

代码语言:javascript
复制
# 实例化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),
)
添加的列
添加的列

刪除列

代码语言:javascript
复制
# 实例化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列已经被删除
people_status列已经被删除

重命名列

代码语言:javascript
复制
# 实例化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')
)
列名被修改
列名被修改

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

新的数据模型

代码语言:javascript
复制
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

设置不为空属性

代码语言:javascript
复制
# 实例化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添加的数据
home添加的数据
添加的不为空属性已生效
添加的不为空属性已生效

设置可为空

代码语言:javascript
复制
mgrt.drop_not_null(table='people',column='home')
NOT NULL属性已经去除
NOT NULL属性已经去除

重命名表名

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

代码语言:javascript
复制
mgrt.rename_table(old_name='people', new_name='people_v2')
表名已经被修改
表名已经被修改

索引的增删

增加索引

代码语言:javascript
复制
mgrt.add_index(table='people_v2',columns='id',unique=True)
)
添加的索引
添加的索引

删除索引

代码语言:javascript
复制
# 索引名为{表名_列名}
mgrt.drop_index(table='people_v2',index_name='people_v2_id')
索引被删除
索引被删除

更多内容详见:

代码语言:javascript
复制
http://docs.peewee-orm.com/en/latest/peewee/playhouse.html#schema-migrations

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

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
  • 关于 playhouse
  • 实例
    • 添加列
      • 刪除列
        • 重命名列
          • 新的数据模型
        • 设置不为空属性
          • 设置可为空
            • 重命名表名
              • 索引的增删
                • 增加索引
                • 删除索引
            相关产品与服务
            数据库
            云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
            领券
            问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档