2013-05-20 31 views
2

丟失數據我有在MySQL數據庫500K左右條目的Django模型。我想另一個字段添加到我的模型:和Django南schemamigration

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`); [] 

Th從「蟒蛇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

你試圖手工編寫的遷移,而不是使用'--auto'選項? –

+0

可以更好地顯示生成的遷移和相應的已執行SQL的內容... – okm

+1

向我們展示爲產品應用程序生成的遷移以及./manage.py migrate的輸出--list –

回答

0

對於500k條記錄,這可能不適合您的情況,但爲了其他可能來到此頁面的人的利益,您可能想嘗試使用django-evolution https://code.google.com/p/django-evolution/而不是South。我已經使用了兩者,並發現雖然功能不夠全面,但Evolution卻比南方更難處理大多數遷移。