我有一个django模型,在mysql数据库中有大约500k条目。我想在我的模型中添加另一个字段:
site = models.ForeignKey(Site, verbose_name=_('Site'),null=True,blank=True).
但是我通过运行:
丢失了所有数据python manage.py schemamigration product --auto
python manage.py migrate product
生成的迁移脚本是:
class Migration(SchemaMigration):
def forwards(self, orm):
# Adding field 'Product.site'
db.add_column('product_product', 'site',
self.gf('django.db.models.fields.related.ForeignKey')(to=orm['sites.Site'], null=True, blank=True),
keep_default=False)
def backwards(self, orm):
# Deleting field 'Product.site'
db.delete_column('product_product', 'site_id')
为迁移生成的sql是:
Running migrations for product:
- Migrating forwards to 0016_auto__add_field_product_site.
> product:0016_auto__add_field_product_site
= SET FOREIGN_KEY_CHECKS=0; []
= ALTER TABLE `product_product` ADD COLUMN `site_id` integer NULL; []
- no dry run output for alter_column() due to dynamic DDL, sorry
= ALTER TABLE `product_product` ADD CONSTRAINT `site_id_refs_id_10570b8a766fecf5` FOREIGN KEY (`site_id`) REFERENCES `django_site` (`id`); []
= CREATE INDEX `product_product_6223029` ON `product_product` (`site_id`); []
“python manager.py迁移产品 - 列表”中的最新迁移历史记录是:
(*) 0011_auto__add_field_product_category_str
(*) 0012_auto__add_field_product_store_id
(*) 0013_auto__del_field_product_site__del_unique_product_sku_site__del_unique_
(*) 0014_auto__chg_field_product_short_description__chg_field_product_descripti
(*) 0015_auto__add_field_product_phase_tag
( ) 0016_auto__add_field_product_site
幸运的是,我有数据库备份。有没有办法在不丢失现有数据的情况下向模型添加字段?
答案 0 :(得分:0)
有500k记录,这可能不适用于您的情况,但为了其他可能来到此页面的人的利益,您可能想尝试使用django-evolution https://code.google.com/p/django-evolution/而不是South。我已经使用了两者,并且发现虽然功能不太全面,但Evolution处理的大多数迁移都比南方少得多。