将CSV导入MySQL数据库(Django Webapp)

时间:2012-06-28 12:48:52

标签: python mysql django

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

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

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

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

但是我很困惑Django会如何理解这一点,因为我们在这里没有提到任何列名。 我是Django的新手,甚至更新的数据库,所以我真的不知道这会如何解决。

4 个答案:

答案 0 :(得分: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"))

答案 1 :(得分:0)

这不是Django代码,而Django并不关心你所谓的CSV文件中的列。这是通过数据库shell直接对数据库运行的SQL。您应该查看MySQL文档以获取更多详细信息,但它只是将列按顺序排列在表中。

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

答案 2 :(得分: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 */

More in-depth analysis of the LOAD DATA command at MySQL.com

答案 3 :(得分:0)

该命令由MySQL解释,而不是Django。如the manual中所述:

  

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

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

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