阅读 400

Peewee进阶 | 你必须得会的!

前言

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

关于 playhouse

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

实例

现存的数据库结构如下:

一个库+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), ) 复制代码

添加的列

刪除列

# 实例化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列已经被删除

重命名列

# 实例化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 复制代码

设置不为空属性

# 实例化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添加的数据

添加的不为空属性已生效

设置可为空

mgrt.drop_not_null(table='people',column='home') 复制代码

NOT NULL属性已经去除

重命名表名

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

mgrt.rename_table(old_name='people', new_name='people_v2') 复制代码

表名已经被修改

索引的增删

增加索引

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 复制代码

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


作者:Python测试和开发
链接:https://juejin.cn/post/7015471071834931231


文章分类
后端
文章标签
版权声明:本站是系统测试站点,无实际运营。本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 XXXXXXo@163.com 举报,一经查实,本站将立刻删除。
相关推荐