Django:syncdb失败后的Loaddata命令

时间:2011-07-16 12:43:19

标签: django

我正在尝试使用fixtures作为数据库无关的方式将数据存入我的数据库,但这比它应该更难。我想知道我做错了什么......

具体来说,当我执行syncdb后跟一个迁移后跟一个loaddata 我遇到了麻烦,因为 syncdb已经创建了loaddata尝试从转储读取的数据 。这会导致双重输入,从而导致崩溃的脚本。

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

但这对我来说很奇怪,这似乎是一个被忽视的问题。固定装置是不是要将实际(实时)数据放入?

如果是这样的话:是否有任何Django格式?或者每个人都只是将数据转储为SQL?如果是这样,如何将SQLite中的开发数据迁移到生产数据库?

2 个答案:

答案 0 :(得分:1)

如果您正确地命名了灯具并且位置正确,那么

syncdb也会从灯具加载数据。有关详细信息,请参阅此链接。

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

如果您不希望在每个syncdb上加载数据,则需要更改灯具的名称。

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

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

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

答案 1 :(得分:0)

OP在这里;这是我到目前为止所提出的:

# 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_objects。 migrate之前和loaddata之前。我不确定我喜欢它,我很惊讶这是必要的,但它确实有效。