Djangoデータのインポートとエクスポート


ここでは、SQLite 3、MySQL、PostgreSQLのようなデータベースの移行方法と、異なるマシン上でのデータの移行方法について説明します.
一、簡単なデータのエクスポートとインポート(簡単な移行)
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の から