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
以上就是今天的全部内容了,感谢您的阅读,我们下节再会。
完