我正在Django开发一个webapp,对于它的数据库,我需要将CSV文件导入特定的MySQL数据库。
我搜索了一下,发现很多页面列出了如何做到这一点,但我有点困惑。
大多数网页都说要这样做:
LOAD DATA INFILE '<file>' INTO TABLE <tablenname>
FIELDS TERMINATED BY ','
LINES TERMINATED BY '\n';
但是我很困惑Django会如何理解这一点,因为我们在这里没有提到任何列名。 我是Django的新手,甚至更新的数据库,所以我真的不知道这会如何解决。
答案 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无法告诉如何将输入字段与表列匹配。