0

我正在 Django 中开发一个 webapp,对于它的数据库,我需要将一个 CSV 文件导入到一个特定的 MySQL 数据库中。

我搜索了一下,发现很多页面都列出了如何做到这一点,但我有点困惑。

大多数页面都说要这样做:

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 CsvDbModel,不是from csv_importer.model import CsvDbModel

在您的 models.py 文件中,创建如下内容:

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

然后,进入您的 Python shell 并执行以下命令: my_csv = MyCsvModel.import_data(data = open("my_csv_file_name.csv"))

于 2012-06-28T12:58:37.080 回答
0

这不是 Django 代码,并且 Django 不在乎您如何称呼 CSV 文件中的列。这是您通过 DB shell 直接针对数据库运行的 SQL。您应该查看 MySQL 文档以获取更多详细信息,但它只会按照表中定义的顺序排列列。

如果您想要更多控制,您可以使用该csv模块编写一些 Python 代码来加载和解析文件,然后通过 Django ORM 将其添加到数据库中。但这会比 SQL 方式慢得多。

于 2012-06-28T12:51:51.020 回答
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

该命令由 MySQL 解释,而不是 Django。如手册所述:

默认情况下,当LOAD DATA INFILE语句末尾没有提供列列表时,输入行应包含每个表列的字段。如果您只想加载表的某些列,请指定列列表:

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

如果输入文件中字段的顺序与表中列的顺序不同,您还必须指定列列表。否则,MySQL 无法判断如何将输入字段与表列匹配。

于 2012-06-28T12:55:23.747 回答