2017-05-22 6 views
0

django(非常に小さなプロジェクト)でマイグレーションをセットアップしました。私は、データベースに必要なデータの束を持っている.sqlファイルを持っています。djangoでの移行後に.sqlファイルを実行する

この.sqlファイルを実行中の実行中または実行中に実行する最も良い方法は何ですか。

SQLファイルちょうどそうのようなデータの挿入が含まれています

INSERT INTO `mileages_mileages` (`id`, `miles`, `start_location`, `end_location`) VALUES 
(NULL,3, 'Location 1', 'Location 2'), 

私はちょうど私のモデルの初期移行を実行した後、その.sqlファイルを実行する必要があります。

これは可能ですか?

+1

あなたは[RUNSQL]使用することができます(https://docs.djangoproject.com/en/1.11/ref/migration-operations/:あなたはどちらかを使用する必要があり、これを解決するために、 #runsql)を使用して移行内でsqlを実行します。 – pramod

答えて

1

あなたはもう少しを読んだ後、生のSQL

operations = [ migrations.RunSQL('source dump.sql') ]

+0

これを行うと、「SQLを分割しないとsqlparseは必要です」というエラーが表示されます。思考? – Hanny

+0

あなたはsqlparseが必要です –

+0

'pip install sqlparse' –

0

を実行することができます - 移行にデータをロードするためにSQLを実行しているが、それについて移動する間違った方法です。治具を使用するほうがはるかに優れています。

私はそれ以降、フィクスチャを追加し、そのファイルをデータの取り込みに使用します。

まず、フィクスチャを作成するために、データをテーブルに追加する必要がありました(SQLファイルを手動で実行して、適切なテーブルに追加したばかりです)。

は、それから私は、私はその後、

manage.py loaddata initial_mileages.json

をロードし、それは美しく、インポート私の治具を、作成した

manage.py dumpdata mileage.mileage --indent 2 --format=json --output initial_mileages.json

を走りました。

+0

Djangoのドキュメントには同意する価値があります。彼らは、「アプリケーションの初期データを自動的にロードしたい場合は、据え付けを使用せず、RunPythonまたはRunSQL操作でアプリケーションの移行を作成してください。 https://docs.djangoproject.com/en/1.11/howto/initial-data/ - 私は自分自身に完全に同意できないとは知らないが、備品はうまくいくようだが、SQLは間違った方法ではない。 – Nick

0
migrations.RunSQL() 

入力としてファイルを受け入れません。生のSQLのみ。

migrations.RunSQL(
    """ 
    INSERT INTO 'mileages_mileages' ('id', 'miles', 'start_location', 'end_location') 
    VALUES 
     (NULL,3, 'Location 1', 'Location 2'); 
    """) 

または

def load_data_from_sql(apps, schema_editor): 
    file_path = os.path.join(os.path.dirname(__file__), 'file_name.sql') 
    sql_statement = open(file_path).read() 
    with connection.cursor() as c: 
     c.execute(sql_statement) 

class Migration(migrations.Migration): 
    dependencies = [ 
     ('..', '...'), 
    ] 

    operations = [ 
     migrations.RunPython(load_data_from_sql), 
    ] 
関連する問題