首页 > 解决方案 > 如何在 SQLite 中使用 peewee 更改字段的数据类型

问题描述

租赁帮我弄清楚。我为数据库中的表创建了这个类。

class ProfileAdditionalField(peewee.Model):
    profile = peewee.ForeignKeyField(RpProfile, on_delete='cascade')
    item = peewee.ForeignKeyField(AdditionalField, on_delete='cascade')
    is_allowed = peewee.BooleanField(default=True)

    class Meta:
        database = db
        primary_key = peewee.CompositeKey('profile', 'item')

当我尝试修改 RpProfile 表时,ProfileAdditionalField 表中的所有条目都会被删除。我认为问题在于设置“on_delete = cascade”

    playhouse_migrate.migrate(
        migrator.add_column('RpProfile', 'show_link',
                            peewee.BooleanField(default=False)),
    )

我使用 SQLite,migrator.alter_column_type 命令在其中不起作用。我什至无法更改设置,以便不再自动删除数据。如何在不从 ProfileAdditionalField 表中删除数据的情况下向 RpProfile 表添加新字段?

标签: pythonsqliteormpeewee

解决方案


Sqlite 对更改列的支持有限。这是有据可查的:

https://sqlite.org/lang_altertable.html

pragma foreign_keys=0在进行任何更改之前,您可以尝试在 sqlite ( ) 中禁用外键约束。除了简单地在 sqlite 中添加新列之外,为了做任何事情,peewee 必须创建一个具有所需架构的临时表,迁移所有内容,然后删除旧表并重命名临时表。


推荐阅读