从 .csv 文件将数据插入多个 MySQL 数据库表

Posted

技术标签:

【中文标题】从 .csv 文件将数据插入多个 MySQL 数据库表【英文标题】:Insert Data to multiple MySQL database tables from .csv file 【发布时间】:2011-09-20 15:42:01 【问题描述】:

我有一个包含表格的数据库:人员、球员、教练和球队。所有表都有一个自动递增的 id 字段作为主键。人有 id、firstname、lastname。 Player 和 coach 都有 id 字段,以及 person_id 和 team_id 作为外键,将它们与其他表中的 team.id 或 person.id 字段联系起来。

现在,为了完全填充这些表格,我有几个 csv 文件,其中包含每支球队的球员姓名列表。我可以编写一个 bash 或 python 脚本来获取这些数据,并且不仅可以将名称输入到 person 表中,还可以将正确的 person 和 team id 值放入 player 表中吗?

如果问题不清楚,请提出,我会尽我所能澄清。谢谢。

mysql> describe person;
+-----------+-------------+------+-----+---------+----------------+
| Field     | Type        | Null | Key | Default | Extra          |
+-----------+-------------+------+-----+---------+----------------+
| id        | int(11)     | NO   | PRI | NULL    | auto_increment |
| firstname | varchar(30) | NO   |     | NULL    |                |
| lastname  | varchar(30) | NO   |     | NULL    |                |
+-----------+-------------+------+-----+---------+----------------+
mysql> describe player;
+-----------+---------+------+-----+---------+----------------+
| Field     | Type    | Null | Key | Default | Extra          |
+-----------+---------+------+-----+---------+----------------+
| id        | int(11) | NO   | PRI | NULL    | auto_increment |
| person_id | int(11) | NO   | MUL | NULL    |                |
| team_id   | int(11) | NO   | MUL | NULL    |                |
+-----------+---------+------+-----+---------+----------------+
mysql> describe team;
+-----------+-------------+------+-----+---------+----------------+
| Field     | Type        | Null | Key | Default | Extra          |
+-----------+-------------+------+-----+---------+----------------+
| id        | int(11)     | NO   | PRI | NULL    | auto_increment |
| teamname  | varchar(25) | NO   |     | NULL    |                |
| location  | varchar(40) | NO   |     | NULL    |                |
| city      | varchar(25) | NO   |     | NULL    |                |
| state     | varchar(2)  | NO   |     | NULL    |                |
| venue     | varchar(35) | NO   |     | NULL    |                |
| league_id | int(11)     | NO   | MUL | NULL    |                |
+-----------+-------------+------+-----+---------+----------------+

以下是 csv 文件内容的示例: (AL-Central-Indians.csv)

Fausto,Carmona
Carlos,Carrasco
Kelvin,De La Cruz
Chad,Durbin

【问题讨论】:

答案是可以的。如果您发布一些代码和示例输入/输出,我们可能会进一步帮助您... 好的,我在表的sql描述中添加了,还有csv的内容 【参考方案1】:

你可以直接使用mysql命令如下:

load data local infile 'AL-Central-Indians.csv' into table player
fields terminated by ','
enclosed by '"'
lines terminated by '\n'
(person_id, team_id)

我是从here 那里得到的。尽管该页面还首先处理将 excel 导出为 CSV。

【讨论】:

【参考方案2】:

使用ORM 对您的目的来说可能有点矫枉过正,但如果您需要真正处理数据,它会让您的生活变得轻松。它需要你安装一些软件,但如果你愿意学习一些新东西,你可能会在路上收获很多。幸运的是,开始使用它并不难,例如使用 Django:

下载并安装 django 使用 django-admin startproject myproject 创建一个新项目 创建一个新应用:./manage.py startapp myapp 在settings.py中更改数据库连接参数 ./manage.py inspectdb 应该为您创建模型。使用./manage.py inspectdb > myapp/models.py 保存。 执行export DJANGO_SETTINGS_MODULE=settings 允许您从命令行脚本使用django

现在您可以用这种方式创建import_players.py 脚本:

from myapp.models import Player, Person, Coach, Team
for my_file in my_files: # TODO: Iterate through your files
    team = Team.objects.create(name=my_team_name) # creates a db record for a team
    for line in lines_in_my_file: # TODO: Iterate through lines in your file
        player = Player.objects.create(name=my_player_name, team=team) creates a db record for a player

查看此内容以了解如何使用模型:https://docs.djangoproject.com/en/dev/topics/db/models/

【讨论】:

以上是关于从 .csv 文件将数据插入多个 MySQL 数据库表的主要内容,如果未能解决你的问题,请参考以下文章

python 从csv文件插入mysql数据库

在 C# 中有效地将数据插入 MySQL 中的多个表中

通过 python 将 csv 文件插入 MySQL。运行但数据未填充到表中

从 .CSV 文件比较/插入/更新 MySQL 数据库中的产品的最佳方法是啥

将数据插入 MySQL 数据库时使用 PHP 替换 CSV 文件中的空值

如何将数据从单个 csv/excel 文件传输到多个 oracle 表