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

3 投票
2 回答
1692 浏览
提问于 2025-04-16 20:06

我有一个数据库,里面有几个表:person(人)、player(球员)、coach(教练)和team(队伍)。每个表都有一个自动递增的id字段,作为主键。person表里有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

2 个回答

1

使用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/

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)

这个方法我是在这里找到的。虽然那篇文章主要讲的是如何先把Excel文件导出成CSV格式。

撰写回答