【问题标题】:Automate transfer of csv file to MySQL自动将 csv 文件传输到 MySQL
【发布时间】:2011-07-15 21:59:50
【问题描述】:
我有一个 csv 文件,我将通过调用 cygwin+ bash 脚本的批处理脚本定期更新该文件。 我想自动将 csv 文件上传到 MySQL 数据库中,以便定期使用 csv 文件更新我的数据库中的表。该数据库当前在 Windows Server 2003 机器上运行,并由 phpMyAdmin 管理。
我在网上查看并找到了一些可以实现其中一部分的方法,但我对这些源中提供的代码应该放在哪里以及如何调用它们感到困惑。例如,Import CSV file directly into MySQL 似乎展示了如何从 SQL 命令行一次将 csv 文件上传到 MySQL 数据库,但不重复,后者正是我所需要的。
如果可能的话,我更喜欢涉及 bash 脚本(而不是批处理和 php)的解决方案(即 我更喜欢可以与更新 csv 文件的 bash 脚本集成的解决方案) .
谢谢
【问题讨论】:
标签:
mysql
database
bash
csv
phpmyadmin
【解决方案1】:
您可以通过执行以下操作从命令行执行 MySQL 脚本:
mysql -uUsername -pPassword database_name < infile.sql
你可以从命令行调用它,在 infile.sql 中你可以有如下代码:
LOAD DATA INFILE 'filename.csv' TO table_name
FIELDS TERMINATED BY ','
【解决方案2】:
您可以使用此处的文档:
# some bash script stuff
mysql ... <<EOF
SQL COMMANDS
GO HERE
EOF
# more bash script stuff
【解决方案3】:
您可以使用 Quartz 创建一个 cronjob - 用于定期更新您的数据库。在 cronmaker (http://www.cronmaker.com/) 的帮助下,您可以选择更新数据库的时间和频率。
这是一个将数据导入 MySQL 数据库的示例 SQL 脚本:
LOAD DATA INFILE 'c:/.../filename.csv'
INTO TABLE discounts
FIELDS TERMINATED BY ','
ENCLOSED BY '"'
LINES TERMINATED BY '\n'
IGNORE 1 ROWS;
使用您的首选语言在您的 cronjob 中运行上述脚本。