2

我对使用 South 迁移方案和数据的概念隐约熟悉,但现在我想完成一些更高级的事情;

我有一个模型,它包含一个指示状态(活动/非活动)的布尔字段,现在我需要使用整数字段添加其他可能性。使用 Souths schememigration,更改本身非常简单。

问题是我需要将现有对象(大约 400+)中的状态转换为整数(0 表示假,1 表示真)。

这甚至可能吗,还是我需要找到另一种方法?

4

3 回答 3

1

您使用什么数据库系统?我的 SQL 吗?PostgreSQL ?SQLite ? .. 对我来说,最容易迁移数据的是一个 SQL 补丁。

例如,对于 PostgreSQL:

-- DROP DEFAULT IF THERE IS ONE
ALTER TABLE app_name.model_name ALTER mycolumn TYPE integer USING CASE WHEN mycolumn=FALSE THEN 0 ELSE 1 END;
-- SET A NEW DEFAULT IF THERE WAS ONE
于 2013-09-04T07:08:33.410 回答
0

我对 PostgreSQL 有类似的问题,像这样改变迁移有帮助:

def forwards(self, orm):

    # Changing field 'SomeModel.status'
    hlp = db.alter_string_set_type
    db.alter_string_set_type = 'ALTER COLUMN %(column)s TYPE %(type)s USING %(column)s::integer::smallint'
    db.alter_column('someapp_somemodel', 'status', self.gf('django.db.models.fields.PositiveSmallIntegerField')())
    db.alter_string_set_type = hlp

def backwards(self, orm):

    # Changing field 'SomeModel.status'
    hlp = db.alter_string_set_type
    db.alter_string_set_type = 'ALTER COLUMN %(column)s TYPE %(type)s USING %(column)s::integer::boolean'
    db.alter_column('someapp_somemodel', 'status', self.gf('django.db.models.fields.BooleanField')())
    db.alter_string_set_type = hlp

(当然对于 MySQL 语法会有所不同)

于 2014-11-21T09:06:00.917 回答
-1

阅读文档后,这非常简单(doh!)。

schemamigration - 添加 intfield 数据迁移 - 如果 bool >> int = 1,否则 int = 0 schemamigration - 删除 boolfield

于 2013-09-05T08:24:49.433 回答