syncdb失败后的Loaddata命令



我试图使用fixture作为数据库无关的方式来获取数据到我的数据库中,但是这比它应该的要困难得多。我想知道我做错了什么…

特别是,当我执行syncdb,然后执行迁移,然后执行loaddata时,我遇到了麻烦,因为syncdb已经创建了数据,loaddata试图从转储中读取。这会导致双条目,从而导致脚本崩溃。

这似乎与这里描述的问题相同:https://code.djangoproject.com/ticket/15926

但我觉得很奇怪,这似乎是一个被忽视的问题。固定装置不是为了实际放置真实(实时)数据吗?

如果是这样:是否有任何django格式意味着这个?还是每个人都只是将数据转储为SQL?如果是这样,如何将SQLite中的开发数据迁移到生产数据库中呢?

syncdb也会从fixture加载数据,如果您有正确的fixture命名和正确的位置。查看此链接获取更多信息

https://docs.djangoproject.com/en/1.3/howto/initial-data/automatically-loading-initial-data-fixtures

如果你不想在每个syncdb上加载数据,那么你需要更改fixture的名称。

fixture是加载数据的好方法,我在许多项目中使用过它。在一些项目中,当我有大量的数据时,我有时会编写一个特殊的加载脚本,它将从我的数据源中获取数据并加载我的新django模型,自定义脚本会多做一些工作,但会给你更多的灵活性。

我倾向于远离使用sql加载,如果我可以,因为sql通常是DB特定的,如果你不得不担心加载不同的数据库版本,如果你可以,远离。

"一般来说,使用fixture是一种更简洁的方法,因为它与数据库无关,但初始SQL也相当灵活。"

OP here;这是我目前想到的:

# some_app/management/commands/delete_all_objects.py
from django.core.management.base import BaseCommand, CommandError
from django.db.models import get_models
class Command(BaseCommand):
    help = 'Deletes all objects'
    def handle(self, *args, **options):
        for model in get_models():
            model.objects.all().delete()

然后在syncdb &之后运行delete_all_objectsmigrateloaddata之前。我不确定我是否喜欢它,我很惊讶这是必要的,但它是有效的。

最新更新