django アプリケーションで
初期データを
結果を
前提
環境情報は
OS
sw_vers ----------------------- ProductName: Mac OS X ProductVersion: 10.12.5 BuildVersion: 16F73 -----------------------
python version
python3 -V ----------------------- Python 3.5.1 -----------------------
Django Version
pip3 list | grep Django ----------------------- Django (1.10.7) -----------------------
migrations.RunSQL に INSERT文を 直書きする
以下の
空のマイグレーションファイルを
作成する マイグレーションファイルに、
migrations.RunSQL
で、INSERT 文を 記載する。 migrate 実行
空のマイグレーションファイルを 作成する
./manage.py makemigrations festivals4partypeople --empty ----------------------------------------- Migrations for 'festivals4partypeople': festivals4partypeople/migrations/0002_auto_20170604_1454.py: -----------------------------------------
マイグレーションファイルに、migrations.RunSQL
で、 INSERT 文を 記載する。
以下のように
第2引数の
# -*- coding: utf-8 -*- # Generated by Django 1.10.2 on 2017-06-04 05:54 from __future__ import unicode_literals from django.db import migrations class Migration(migrations.Migration): dependencies = [ ('festivals4partypeople', '0001_squashed_0003_auto_20170411_0110'), ] operations = [ # echonest_artist UNKNOWN DATA migrations.RunSQL( """INSERT INTO echonest_artist (id, echonest_id, name, relate_status, create_date, update_date) VALUES (-1, 'XXXXXXXXXXXXXXXXXX', 'XXXXXXXXXXXXXXXXXX', '2', '1970-01-01 00:00:00.000+09', '1970-01-01 00:00:00.000+09');""", """DELETE FROM echonest_artist where id = -1;"""), # lastfm_artist UNKNOWN DATA migrations.RunSQL( """INSERT INTO lastfm_artist (id, mbid, name, relate_status, create_date, update_date) VALUES (-1, 'XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX', 'XXXXXXXXXXXXXXXXXX', '2', '1970-01-01 00:00:00.000+09', '1970-01-01 00:00:00.000+09');""", """DELETE FROM lastfm_artist where id = -1;"""), ]
migrate 実行
- コマンド実行
./manage.py migrate --------------------------------------------- Operations to perform: Apply all migrations: admin, auth, contenttypes, festivals4partypeople, sessions Running migrations: Applying festivals4partypeople.0002_auto_20170604_1454... OK ---------------------------------------------
migrations.RunSQL で SQLファイルを 実行する
sqlparse
を
も
以下、
sqlparse の インストール
python3 -m pip install sqlparse
マイグレーションファイルを 作成する
- migrationファイル
load_sql
と
複数の
RunSQLの
# -*- coding: utf-8 -*- # Generated by Django 1.10.2 on 2017-06-04 06:50 from __future__ import unicode_literals from django.db import migrations def load_sql(filename): f = open(filename) sql_statements = f.read() f.close() return sql_statements class Migration(migrations.Migration): dependencies = [ ('festivals4partypeople', '0002_auto_20170604_1454'), ] operations = [ migrations.RunSQL(load_sql('festivals4partypeople/sqls/V1.0.0.1__Add_heldYears.sql')), migrations.RunSQL(load_sql('festivals4partypeople/sqls/V1.0.0.2__Add_festivals.sql')), migrations.RunSQL(load_sql('festivals4partypeople/sqls/V1.0.0.3__Add_artists.sql')), ]
- sqlファイル
SQL ファイルの
文末を;
区切りにします。
INSERT INTO held_year (id, held_year, create_date, update_date) VALUES (nextval('held_year_id_seq'), '2010', current_date, current_date); INSERT INTO held_year (id, held_year, create_date, update_date) VALUES (nextval('held_year_id_seq'), '2011', current_date, current_date); INSERT INTO held_year (id, held_year, create_date, update_date) VALUES (nextval('held_year_id_seq'), '2012', current_date, current_date); INSERT INTO held_year (id, held_year, create_date, update_date) VALUES (nextval('held_year_id_seq'), '2013', current_date, current_date); INSERT INTO held_year (id, held_year, create_date, update_date) VALUES (nextval('held_year_id_seq'), '2014', current_date, current_date); INSERT INTO held_year (id, held_year, create_date, update_date) VALUES (nextval('held_year_id_seq'), '2015', current_date, current_date);
migrate 実行
./manage.py migrate --------------------------------------------- Operations to perform: Apply all migrations: admin, auth, contenttypes, festivals4partypeople, sessions Running migrations: Applying festivals4partypeople.0003_auto_20170604_1550... OK ---------------------------------------------
migrations.RunSQL に CREATE INDEX 文を 直書きする
後日、
Django の2.1.8
を
Executing Custom SQL in Django Migrations | End Point が
INSERT文とmigrations.RunSQL
で
migrationファイル
# Generated by Django 2.1.8 on 2019-08-16 19:14 from django.db import migrations class Migration(migrations.Migration): dependencies = [ ('home', '0007_entrygooglesearchconsole'), ] operations = [ migrations.RunSQL( """ CREATE INDEX date_idx ON puput_entrypage (date); """, """ DROP INDEX date_idx; """, ) ]
Postgres 以外の
データベースの 場合
INSERT文では試していないので わからないですが、 CREATE INDEX を SQLite で 実行した 際は、 SQL直書きの 場合でも sqlparse
のインストールが 必要でした。
Executing Custom SQL in Django Migrations | End Point にも記載が あるので 引用します。 Unless you’re using Postgres for your database, you’ll need to install the sqlparse library, which allows Django to break the SQL strings into individual statements.
以上です。
コメント