2.12. CSV形式によるエクスポートとインポート¶
CSV形式によるエクスポートとインポートでは、次のメソッドが用意されています。
機能 メソッド クラス エクスポート export_to_csv_file Rows エクスポート export_to_csv_file DAL インポート import_from_csv_file Table インポート import_from_csv_file DAL
同じ名前のメソッドが、 Rows もしくは Table クラスと、 DAL クラスに存在します。DALクラスの メソッドは関連するテーブルを全て、エクスポート・インポートします。
DAL クラスのメソッドは内部で、 Rows もしくは Table のメソッドを呼び出しています。このため始めに、 Rows 及び Tableクラスのメソッドを説明します。
1. export_to_csv_file メソッド( Rows クラス)
CSV形式でのエクスポートを行います。このメソッドは Rows クラスに属しています。
Rowsインスタンスを文字列に変換する場合も、特殊メソッドによって自動的にこのメソッドが呼び出されます。
- サンプル・・・Rowsインスタンスを文字列に変換して表示
>>> rows = db(db.person).select() >>> print rows person.id,person.name 1,Sapopadu 2,Podatoso 3,Pamadapa
- サンプル・・・personテーブルデータを test.csvファイルにCSV形式で出力
>>> open('test.csv', 'w').write(str(db(db.person).select()))
サンプルではRowsインスタンスをstr関数で文字列に変換していますが、 この時 export_to_csv_fileメソッドが動きCSV変換しています
- サンプル・・・明示的に export_to_csv_fileメソッド使用
>>> db(db.person).select().export_to_csv_file(open('test.csv', 'w'))
このサンプルは2のサンプルと同じ動きをします。
- サンプル・・・数値フィールド以外は文字列囲み記号をつけてファイル出力
>>> import csv >>> db(db.person).select().export_to_csv_file(open('test.csv', 'w'), ... quoting=csv.QUOTE_NONNUMERIC)
export_to_csv_file メソッドのパラメーターを指定しています。
パラメータの説明は、 export_to_csv_file()
を参照してください。
2. import_from_csv_file メソッド( Table クラス)
CSV形式ファイルからテーブルのへ、インポートを行います。このメソッドはTableクラスに属しています。
- サンプルデータ
id,name 1,testtest.csv の中身です。データ件数が一件のCSVデータを格納しています。
- サンプル
>>> db.person.import_from_csv_file(open('test.csv', 'r')) >>> print db(db.person).select() person.id,person.name 1,Cecemoso 2,Sopomoso 3,Dudusopa 4,test <- id==4 を挿入した
export_to_csv_file メソッドで作成したCSVファイルのフィールド名は、person.name のように頭にテーブル名が付きます。 しかし import_from_csv_file メソッドでは、先頭のテーブル名を無視してフィールド名だけを使います。 つまりインポートするCSVファイルでは、name のようにフィールド名だけでもOKです。
インポートでは id フィールドのデータは無視します。id はインポート時に新しく番号を振ります。
パラメータの説明は import_from_csv_file()
メソッドを参照してください。
3. export_to_csv_file メソッド( DAL クラス)
アプリケーションの全てのテーブルをCSV形式でエクスポートします。
内部的には Rows クラスの export_to_csv_file()
メソッドを呼んでいます。
- サンプル
>>> db.export_to_csv_file(open('test.csv', 'wb'))全てのテーブルを test.csv にエクスポートします。
- 出力結果のサンプル(test.csvの中身)
TABLE person person.id,person.name 1,Potamata 2,Cotasata TABLE dog dog.id,dog.owner,dog.name 1,2,Masodusa 2,2,Tamatodu END複数のテーブルデータが一緒に出力されます。
- 出力フォーマットは次のようになります。
TABLE テーブル名 フィールド名1,フィールド名2,フィールド名3,・・・・・ フィールド1,フィールド2,フィールド3,・・・・・テーブル間は \r\n\r\n で区切られます。
パラメータの説明は export_to_csv_file()
を参照ください。
4. import_from_csv_file メソッド( DAL クラス)
CSV形式ファイルから、複数のテーブルへインポートします。
内部的には、 Table クラスの import_from_csv_file()
メソッドを呼んでいます。
- サンプル
>>> db.import_from_csv_file(open('test.csv', 'rb'))インポートではidフィールドのデータは無視します。id はインポート時に新しく番号を振ります。
他のテーブルへの参照フィールドは同一のCSVファイルに含まれているデータなら、再採番した番号に 自動的に変更してインポートします。
パラメータの説明は import_from_csv_file()
を参照ください。