スポンサードリンク



こんにちは。sinyです。

本記事ではDjangoでModelデータの情報をCSV形式でバックアップする方法についてご紹介します。

モデルクラス

以下のような会計簿テーブル(モデルクラス)のデータ一覧情報をCSVファイルに出力する例で説明します。

 

バックアップコマンドの作成

今回は、Djangoのカスタムコマンドを使って家計簿テーブル情報をcsvデータファイルとしてバックアップ(出力)する処理を作ります。

以下のように、アプリケーションフォルダ(<app_name>)直下にmanagementフォルダを作成し、さらにその下にcommandsフォルダを作成します。
さらにそれぞれのフォルダ直下に__init__.pyファイルを空で作成します。

 

commandsフォルダ直下にbackup.pyを作成し、ここにバックアップ処理を記述していきます。

 

Djangoでカスタムコマンドを実装するには以下の流れで実行したい処理を記述していきます。

Djangoカスタムコマンドの書き方
  1.  django.core.management.baseから BaseCommandをインポートする。
  2. BaseCommandを承継してCommandという名称のクラスを定義する
  3. handleメソッドを定義し、内部に実行したい処理を記述する。

今回は、handleメソッド内に以下の処理を定義しています。

 

date変数に現在日付をセットし、file_pathにはバックアップファイルのパスを設定しています。
os.makedirsでバックアップファイルの出力先ディレクトリを作成します。(exist_ok=Trueとすることでフォルダが存在していてもエラーを回避)

次のwith open以降ではKakeiboテーブルクラスから全データを取得して、csvのwriter.writerowメソッドでcsvファイルに1行ずつデータを追記してファイル出力させています。

 

上記を実行すると、Djangoプロジェクト直下にbackupフォルダが生成され、kakeibo_20191229.csvのようなバックアップファイル(下図)が生成されます。

赤枠のテーブル列名は以下のコードで自動的に抽出しています。

 

テーブルクラス名._meta.fieldsにアクセスすることでテーブルのメタ情報にアクセスすることができます。
さらにforループを回して.name属性を指定することで対象テーブルのカラム名を1つ1つ抽出することができます。

さらに、青枠はテーブルの各カラムのデータ型で以下のコードで自動的に抽出しています。

これも先ほどと同様にテーブルのメタ情報にアクセスした後、今度は__class__.__name__を指定することでカラムのデータ型を抽出しています。

Djangoのshellモードでも以下の通りデータ型の情報が取得できることが確認できます。

 

バックアップの実行

バックアップは「python manage.py backup」を実行するだけでOKです。

 

以上、「DjangoのModelデータをバックアップする方法」でした。

 

おすすめの記事