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

时间:2011-06-22 18:43:10

标签: python mysql bash csv

我有一个包含表格的数据库:人员,玩家,教练和团队。所有表都有一个自动增量id字段作为主键。人有id,firstname,lastname。玩家和教练都有id字段,以及person_id和team_id作为外键将它们绑定到其他表中的team.id或person.id字段。

现在为了完全填充这些表,我有几个csv文件,其中包含每个团队中玩家的名字列表。我可以编写一个bash或python脚本来获取这些数据,不仅可以输入人员表中的名称,还可以将适当的人员和团队ID值放入播放器表中吗?

如果问题不明确,请问我,我会尽我所能澄清。感谢。

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-中部-Indians.csv)

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

2 个答案:

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