从.csv文件向多个MySQL数据库表插入数据
我有一个数据库,里面有几个表: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格式。