2011-07-16 31 views
0

データベースにデータを取得するためにDBに依存しない方法でフィクスチャを使用しようとしていますが、これははるかに困難です。私は具体的にDjango:syncdbが失敗した後のLoaddataコマンド

...私が間違ってやって思ったんだけど、私はトラブルに実行loaddataの続い移行が続いsyncdbの実行、syncdbの実行は、すでにデータを作成するのでloaddataのを読み取ろうとする際に行いますダンプから。これにより、二重のエントリが発生し、クラッシュするスクリプトが発生します。

これは、ここで説明したのと同じ問題があると思われる:https://code.djangoproject.com/ticket/15926

しかし、これは無視され問題になるようだと私に奇妙です。実際に実際の(ライブ)データを格納するためのものではないのですか?

もしそうなら、これにはどんなDjango形式がありますか?あるいは誰もが単にSQLとしてデータをダンプしていますか?もしそうなら、SQLiteの開発データを本番データベースにどのように移行すればよいでしょうか?

答えて

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

そしてちょうどmigrate & syncdb後とloaddata前の間delete_all_objectsを実行します。これは私がこれまでに思い付いたものです。私はそれが好きであるか分からない、私はそれが必要だと非常に驚いているが、それは動作する。

+0

フィクスチャファイルの名前を変更できますか?もしそうなら、syncdbがピックアップしない名前に名前を変更し、loaddataを呼び出すと、データはデータベースにはまだ存在しません。 –

+0

私は技術的に名前を変更できます。しかし、すべてがスクリプトで実行されているので(これはすべてのデータを消去してしまいます)、これは私の好みにはやや壊れやすいものです –

1

また、正確な名前が付けられたフィクスチャを正しい場所に置いた場合、syncdbはフィクスチャからデータをロードします。詳細については、このリンクを参照してください。

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

あなたは、データがすべてのsyncdbの実行時にロードしたくない場合は、フィクスチャの名前を変更する必要があります。

のフィクスチャはデータをロードするのに適した方法ですが、私はこれを多くのプロジェクトで使用しています。私が大量のデータを持っているプロジェクトでは、データソースからデータを取得して新しいdjangoモデルを読み込む特別な読み込みスクリプトを書くことがありますが、カスタムスクリプトはもう少し作業はしますが、柔軟性が増します。

できるだけSQLをロードするのは難しいですが、SQLは通常DB固有のものですから、別のデータベースバージョンでロードすることを心配しなければならない場合は避けてください。

"一般的に、フィクスチャを使用するのは、データベースに依存しないため、より洗練された方法ですが、初期SQLもかなり柔軟性があります。

+0

あなたが提供したリンクでは:「syncdbを実行するたびにデータがリフレッシュされるので、編集したいデータにはinitial_dataを使用しないでください。 - 私が探しているものではないと思います...私は何かを試してみます –

関連する問題