0

私は Django で webapp を開発しています。そのデータベースのために、特定の MySQL データベースに CSV ファイルをインポートする必要があります。

少し調べてみると、これを行う方法をリストしたページがたくさん見つかりましたが、少し混乱しています。

ほとんどのページはこれを行うように言います:

LOAD DATA INFILE '<file>' INTO TABLE <tablenname>
FIELDS TERMINATED BY ',' 
LINES TERMINATED BY '\n';

しかし、ここでは列名について言及していないため、Django がこれをどのように解釈するのか混乱しています。私は Django に不慣れで、データベースにも不慣れなので、これがどのように機能するかはよくわかりません。

4

4 に答える 4

2

データベース管理者 (つまり、PostgreSQL/MySQL) にいるようです。上記の他の人はそれについて良い説明をしています。

しかし、データを Django 自体にインポートしたい場合 -- Python には、次のような独自の csv 実装がありますimport csv

ただし、Django を初めて使用する場合は、Django CSV Importer のようなものをインストールすることをお勧めします: http://django-csv-importer.readthedocs.org/en/latest/index.html。(アドオンを Python ライブラリにインストールします。)

ただし、残念ながら、作成者はドキュメントにタイプミスがあります。しなければなりませfrom csvImporter.model import CsvDbModelfrom csv_importer.model import CsvDbModel

models.py ファイルで、次のようなものを作成します。

class MyCSVModel(CsvDbModel):
    pass  
    class Meta:
        dbModel = Model_You_Want_To_Reference
        delimiter = ","
        has_header = True

次に、Python シェルに移動し、次のコマンドを実行します。 my_csv = MyCsvModel.import_data(data = open("my_csv_file_name.csv"))

于 2012-06-28T12:58:37.080 に答える
0

SQLステートメントから省略されているため、データを列に順番に追加するだけです。

必要に応じて、フィールドを SQL の末尾に追加できます。

LOAD DATA INFILE '<file>' INTO TABLE <tablenname>
FIELDS TERMINATED BY ',' 
LINES TERMINATED BY '\n'
(@Field1, @Field2, @Field3)    /* Fields in CSV */
SET Col1 = @Field1, Col2 = @Field2, Col3 = @Field3;  /* Columns in DB */

MySQL.com での LOAD DATA コマンドのより詳細な分析

于 2012-06-28T12:55:03.073 に答える
0

これは Django コードではありません。Django は、CSV ファイル内の列を何と呼ぶか​​は気にしません。これは、DB シェルを介してデータベースに対して直接実行する SQL です。詳細については、MySQL のドキュメントを参照する必要がありますが、テーブルで定義されている順序で列を取得するだけです。

さらに制御が必要な場合は、csvモジュールを使用してファイルをロードおよび解析する Python コードを記述し、Django ORM を介してデータベースに追加することができます。ただし、これは SQL の方法よりもはるかに遅くなります。

于 2012-06-28T12:51:51.020 に答える
0

コマンドは、Django ではなく MySQL によって解釈されます。マニュアルに記載されているように:

デフォルトでは、LOAD DATA INFILEステートメントの最後に列リストが指定されていない場合、入力行には各テーブル列のフィールドが含まれていると想定されます。テーブルの一部の列のみをロードする場合は、列リストを指定します。

LOAD DATA INFILE 'persondata.txt' INTO TABLE persondata (col1,col2,...);

入力ファイル内のフィールドの順序がテーブル内の列の順序と異なる場合は、列リストも指定する必要があります。そうしないと、MySQL は入力フィールドをテーブル列と一致させる方法を判断できません。

于 2012-06-28T12:55:23.747 に答える