Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用django south模式迁移丢失数据_Django_Django Models_Django South - Fatal编程技术网

使用django south模式迁移丢失数据

使用django south模式迁移丢失数据,django,django-models,django-south,Django,Django Models,Django South,我有一个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 Mig

我有一个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 migrate product--list”的最新迁移历史记录为:

(*) 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

幸运的是,我有数据库备份。有没有一种方法可以在不丢失现有数据的情况下向模型中添加字段?

对于500k记录,这对于您的情况可能是不可能的,但是为了其他人的利益,您可能希望尝试使用django evolution而不是South。我同时使用了这两种方法,发现Evolution虽然功能不全,但它处理大多数迁移的麻烦远比South少。

您是否尝试过手动编写迁移,与其使用
--auto
选项,不如显示生成的迁移内容和相应的已执行SQL…向我们显示为产品应用程序生成的迁移,以及您的./manage.py migrate输出--list@okm现在添加了脚本,我看不到负责删除数据的命令。除非您有一些sql触发器,否则在不进行任何删除的情况下,该命令应该可以正常工作。另外,您确定在运行此迁移后数据确实被删除了吗?你查过数据库了吗?