Djangoデータのインポートとエクスポート
4209 ワード
ここでは、SQLite 3、MySQL、PostgreSQLのようなデータベースの移行方法と、異なるマシン上でのデータの移行方法について説明します.
一、簡単なデータのエクスポートとインポート(簡単な移行)
1.djangoプロジェクトはエクスポート方法python manageを提供した.py dumpdata、appnameを指定しない場合はデフォルトですべてのappをエクスポートします
1
例えばmysiteというプロジェクトがあり、中にはblogというappがあり、blogのすべてのデータをエクスポートしたいと思っています.
1
2.appnameを指定する必要のないデータインポート
1
備考:よく使われる
1
利点:サポートされている様々なデータベースと互換性があります.つまり、以前はSQLite 3を使用していましたが、エクスポート可能になった後、この方法でMySQL、PostgreSQLなどのデータベースにインポートし、逆にも可能です.
欠点:データ量が大きい場合、速度が相対的に遅く、テーブルの関係が複雑な場合はインポートできません.
二、データベースの移行
2.1. Djangoが持参したコマンドで
例えば、初期に私たちが便利に開発するために使っていたsqlite 3データベースは、サイトのデータが多すぎて、sqlite 3の性能が少し追いつかないことに気づき、postgreSQL、あるいはMySQLに変えたいときです.
また、上記のコマンドを使用すると、運が良ければインポートに成功する可能性があります.プロセスは次のとおりです.
2.1.1. 元のデータベース全体からすべてのデータをエクスポート
1
2.1.2. mysite_all_data.jsonを別のサーバまたはコンピュータに転送してインポート
1
運が良ければ導入が完了するかもしれませんが、うまくいかないことが多いのは、次の理由です.
a)私たちはモデルを書くときにCharFieldを使うなら、必ずmax_を書きます.length、sqlite 3ではこの最大長さをチェックしないで、最大許容長さは100と書いて、あなたはデータベースに10000個を置いて、sqlite 3はすべて間違いを報告しないで、その上データの長さを遮断しないで、これはslite 3の長所のようで、しかしsqlite 3から他のデータベースを導入することにも困難をもたらして、MySQLとPostgreSQLデータベースはすべて最大長さを検査して、超えた時に間違いを報告します!
b)Djangoが持っているcontentTypeはいくつかの問題を引き起こす
上記の方法で1つのappだけを移行するのは問題ないはずですが、ユーザーがいれば、ユーザーグループがフックすると、状況が悪くなりがちです.インポート後にデータが変更されていない場合は、再インポートを検討することができます.また、手動でバックグラウンドに入力したり、変更したりした場合は、この方法は適用されません.
2.2データベースに付属のエクスポートインポートコマンド
予備知識:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
Django用のデータベース名をzqxtとする
2.2.1 PostgreSQL:
1
2
3
4
5
6
7
2.2.2 MySQL:
phpMyAdminなどのWebツールを使用すると、インポートとエクスポートが簡単です.ここでは、コマンドラインの操作方法について説明しません.
1
2
3
4
5
6
7
8
一、簡単なデータのエクスポートとインポート(簡単な移行)
1.djangoプロジェクトはエクスポート方法python manageを提供した.py dumpdata、appnameを指定しない場合はデフォルトですべてのappをエクスポートします
1
python manage.py dumpdata [appname] > appname_data.json
例えばmysiteというプロジェクトがあり、中にはblogというappがあり、blogのすべてのデータをエクスポートしたいと思っています.
1
python manage.py dumpdata blog > blog_dump.json
2.appnameを指定する必要のないデータインポート
1
python manage.py loaddata blog_dump.json
備考:よく使われる
1
python manage.py dumpdata auth > auth.json
#
利点:サポートされている様々なデータベースと互換性があります.つまり、以前はSQLite 3を使用していましたが、エクスポート可能になった後、この方法でMySQL、PostgreSQLなどのデータベースにインポートし、逆にも可能です.
欠点:データ量が大きい場合、速度が相対的に遅く、テーブルの関係が複雑な場合はインポートできません.
二、データベースの移行
2.1. Djangoが持参したコマンドで
例えば、初期に私たちが便利に開発するために使っていたsqlite 3データベースは、サイトのデータが多すぎて、sqlite 3の性能が少し追いつかないことに気づき、postgreSQL、あるいはMySQLに変えたいときです.
また、上記のコマンドを使用すると、運が良ければインポートに成功する可能性があります.プロセスは次のとおりです.
2.1.1. 元のデータベース全体からすべてのデータをエクスポート
1
python manage.py dumpdata > mysite_all_data.json
2.1.2. mysite_all_data.jsonを別のサーバまたはコンピュータに転送してインポート
1
python manage.py loaddata mysite_all_data.json
運が良ければ導入が完了するかもしれませんが、うまくいかないことが多いのは、次の理由です.
a)私たちはモデルを書くときにCharFieldを使うなら、必ずmax_を書きます.length、sqlite 3ではこの最大長さをチェックしないで、最大許容長さは100と書いて、あなたはデータベースに10000個を置いて、sqlite 3はすべて間違いを報告しないで、その上データの長さを遮断しないで、これはslite 3の長所のようで、しかしsqlite 3から他のデータベースを導入することにも困難をもたらして、MySQLとPostgreSQLデータベースはすべて最大長さを検査して、超えた時に間違いを報告します!
b)Djangoが持っているcontentTypeはいくつかの問題を引き起こす
上記の方法で1つのappだけを移行するのは問題ないはずですが、ユーザーがいれば、ユーザーグループがフックすると、状況が悪くなりがちです.インポート後にデータが変更されていない場合は、再インポートを検討することができます.また、手動でバックグラウンドに入力したり、変更したりした場合は、この方法は適用されません.
2.2データベースに付属のエクスポートインポートコマンド
予備知識:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
mysql ( mysql -u root -p) shell
GBK zqxt
create database `zqxt` DEFAULT CHARACTER SET gbk COLLATE gbk_chinese_ci;
UTF8 zqxt
CREATE DATABASE `zqxt` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;
(zqxt) ,
GRANT ALL PRIVILEGES ON zqxt.* TO
" "
@
"localhost"
IDENTIFIED BY
" "
;
FLUSH PRIVILEGES;
shell
EXIT;
Django用のデータベース名をzqxtとする
2.2.1 PostgreSQL:
1
2
3
4
5
6
7
# zqxt zqxt.sql
pg_dump zqxt > zqxt.sql
#
psql zqxt -f zqxt.sql
# : , sudo su postgres postgres
2.2.2 MySQL:
phpMyAdminなどのWebツールを使用すると、インポートとエクスポートが簡単です.ここでは、コマンドラインの操作方法について説明しません.
1
2
3
4
5
6
7
8
# zqxt zqxt.sql
mysqldump -u username -p zqxt > zqxt.sql
# ( )
cat
/path/to/zqxt
.sql | mysql -u username -p zqxt
mysql -u username -p zqxt
/path/to/zqxt
.sql
mysql -u username -p zqxt mysql shell ,
source
/path/to/zqxt
.sql
#
:cmdでエクスポートコマンドを すると、「mysqldump」は または コマンドではなく、 なプログラムまたはバッチファイルではありません.
:MySQLのインストールディレクトリの に って、 えば はmysqlをcディスクに れて、c:mysqlbinの でやっと することができます.ファイルは、データベースに するプロジェクトの に されます.
まとめ: のデータベースは、どのようにインポートしてエクスポートするかを で してください.データベース のエクスポートのメリットは、 の くのチュートリアルなど、データ の を するのに が けます. のチュートリアルと のチュートリアルは1 1の です.そうすればpython manageを います.py dumpdataはチュートリアルとチュートリアルの をエクスポートできませんが、データベース のエクスポートに はありません.もちろん、スクリプトを いて をエクスポートしてインポートすることもできます.Djangoが したpython manage.py dumpdataとpython manage.py loaddataの の は、データベース でインポート・エクスポートできることです.
はDjangoの から