はじめに
先日、Djangoプロジェクトにおいて、データベースのデータをdumpした際に日本語のデータが文字化けしてしまいました。
本記事ではその時に実施したutf-8形式でdumpする方法を紹介します。
環境
以下の環境で動作を確認しています。
python version 3.7.1
Django version 3.2.16
Djangoでdumpするコマンド
Djangoでutf-8形式にdumpするコマンドは以下です。
Djangoアプリのmanage.pyがある階層で実行します。
$ python -Xutf8 manage.py dumpdata [アプリ名[.モデル名]] > [出力先]
- -Xutf8:データをutf8形式で出力するオプション。
- [アプリ名[.モデル名]]:アプリ名のみを指定した場合は全てのモデルのデータを出力します。アプリ名.モデル名と指定した場合は該当のモデルのデータのみを出力します。
- [出力先]:dumpファイルの出力先になります。一般的には[アプリ名]/fixtures/ [ファイル名]を指定することが多いです。
実例
例として書籍管理アプリ(booksアプリ)における書籍カテゴリモデルのデータをdumpします。
model.py
class Category(models.Model):
"""書籍カテゴリモデル"""
name = models.CharField(verbose_name='カテゴリ名', max_length=50)
class Meta:
verbose_name_plural='Category'
def __str__(self):
return self.name
ターミナルで以下のコマンドを実行します。
$ python -Xutf8 manage.py dumpdata books.Category > books/fixtures/category.json
dumpファイルが無事生成されました。日本語も文字化けしていません。
category.json
[
{
"model": "books.category",
"pk": "1",
"fields": {"name": "文学・評論"}
} ,
{
"model": "books.category",
"pk": "2",
"fields": {"name": "人文・思想"}
} ,
{
・・・以下略
}]
参考サイト
終わりに
RDMSに依存せずにDjangoでdumpできるのは非常に便利!