peewee优雅的ORM框架-进阶-peewee-2

前言

接上篇文章,如果我们想要修改表结构或者字段属性该如何操作呢?带着这个问题,今天我们就一起来了解 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

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

版权声明:除特殊说明,博客文章均为phyger原创,依据CC BY-SA 4.0许可证进行授权,转载请附上出处链接及本声明。来自:https://u1s1.vip/archives/167
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇