使用mysqlimport命令从命令行将csv文件导入mysql

HattrickNZ

如何使用mysqlimport命令从命令行将csv文件导入mysql,这样就不必进入mysql。

我正在尝试在这里使用此答案

从命令行将csv文件导入mysql

root@678cf3cd1587:/home# mysqlimport --columns='head -n 1 discounts.csv' --ignore-lines=1 temp discounts.csv -u root -p
Enter password:
mysqlimport: Error: 1064, You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '-n 1 discounts.csv)' at line 1, when using table: discounts
root@678cf3cd1587:/home#

但是我无法正常工作,有人可以告诉我我做错了什么吗?

这是我的文件的样子

root@678cf3cd1587:/var/lib/mysql-files# cat discounts.csv
id,title,expired_date,amount
1,"1Spring Break ",20140401,20
2,"2Spring Break ",20140401,20
3,"3Spring Break ",20140401,20
4,"3Spring Break ",20140401,20
5,"3Spring Break ",20140401,20
6,"3Spring Break ",20140401,20
7,"3Spring Break ",20140401,20

这就是我的mysql的样子:

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sys                |
| temp               |
+--------------------+
5 rows in set (0.00 sec)

mysql> use temp
Database changed
mysql> show tables;
Empty set (0.00 sec)

mysql>

注意我正在docker容器中运行mysql,如果需要的话,我可以提供更多详细信息。这个问题重复了,但我认为我是特定的。

编辑1

我尝试了不同的单引号'double-quote'和反引号`。尽管反引号给出了不同的错误,这有帮助吗?

root@678cf3cd1587:/home# mysqlimport --columns='head -n 1 discounts.csv' --ignore-lines=1 temp discounts.csv -u root -p
Enter password:
mysqlimport: Error: 1064, You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '-n 1 discounts.csv)' at line 1, when using table: discounts
root@678cf3cd1587:/home# mysqlimport --columns="head -n 1 discounts.csv" --ignore-lines=1 temp discounts.csv -u root -p
Enter password:
mysqlimport: Error: 1064, You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '-n 1 discounts.csv)' at line 1, when using table: discounts
root@678cf3cd1587:/home# mysqlimport --columns=`head -n 1 discounts.csv` --ignore-lines=1 temp discounts.csv -u root -p
Enter password:
mysqlimport: Error: 1049 Unknown database 'date,amount'

编辑2

如果我没有创建表就做得到 Error: 1146, Table 'temp.discounts' doesn't exist, when using table: discounts

root@678cf3cd1587:/var/lib/mysql-files# mysqlimport temp /var/lib/mysql-files/discounts.csv -u root -p --columns=`head -n 1 /var/lib/mysql-files/discounts.csv` --ignore-lines=1
Enter password:
mysqlimport: Error: 1146, Table 'temp.discounts' doesn't exist, when using table: discounts

如果我然后创建表,然后再试一次

mysql> CREATE TABLE discounts (
    ->   id INT NOT NULL AUTO_INCREMENT,
    ->   title VARCHAR(255) NOT NULL,
    ->   expired_date DATE NOT NULL,
    ->   amount DECIMAL(10,2) NULL,
    ->   PRIMARY KEY (id)
    -> );
Query OK, 0 rows affected (0.03 sec)

mysql>
mysql>
mysql>
mysql> show tables;
+----------------+
| Tables_in_temp |
+----------------+
| discounts      |
+----------------+
1 row in set (0.00 sec)

mysql> select * from discounts;
Empty set (0.00 sec)

我收到以下错误 Error: 1265, Data truncated for column 'id' at row 1, when using table: discounts

root@678cf3cd1587:/var/lib/mysql-files# mysqlimport temp /var/lib/mysql-files/discounts.csv -u root -p --columns=`head -n 1 /var/lib/mysql-files/discounts.csv` --ignore-lines=1
Enter password:
mysqlimport: Error: 1265, Data truncated for column 'id' at row 1, when using table: discounts
root@678cf3cd1587:/var/lib/mysql-files#

/var/lib/mysql-files/discounts.csv明确地使用它是因为,如果我理解正确,这是我可以从中导入文件的唯一目录secure_file_priv

mysql> SHOW VARIABLES LIKE "secure_file_priv";
+------------------+-----------------------+
| Variable_name    | Value                 |
+------------------+-----------------------+
| secure_file_priv | /var/lib/mysql-files/ |
+------------------+-----------------------+
1 row in set (0.01 sec)

mysql>

编辑3

我有这个工作 mysqlimport --columns="`head -n 1 /var/lib/mysql-files/discounts.csv`" --ignore-lines=1 temp /var/lib/mysql-files/discounts.csv -u root -p --fields-terminated-by=',' --fields-optionally-enclosed-by='"'

root@678cf3cd1587:/home# mysqlimport --columns="`head -n 1 /var/lib/mysql-files/discounts.csv`" --ignore-lines=1 temp /var/lib/mysql-files/discounts.csv -u root -p --fields-terminated-by=','  --fields-optionally-enclosed-by='"'
Enter password:
temp.discounts: Records: 7  Deleted: 0  Skipped: 0  Warnings: 0
root@678cf3cd1587:/home#
root@678cf3cd1587:/home# cat /var/lib/mysql-files/discounts.csv
id,title,expired_date,amount
1,"1Spring Break ",20140401,20
2,"2Spring Break ",20140401,20
3,"3Spring Break ",20140401,20
4,"3Spring Break ",20140401,20
5,"3Spring Break ",20140401,20
6,"3Spring Break ",20140401,20
7,"3Spring Break ",20140401,20

但是如上所述,我必须先在sql中创建表。

CREATE TABLE discounts (
  id INT NOT NULL AUTO_INCREMENT,
  title VARCHAR(255) NOT NULL,
  expired_date DATE NOT NULL,
  amount DECIMAL(10,2) NULL,
  PRIMARY KEY (id)
);

据我了解,我还必须按设置使用此文件/var/lib/mysql-files/discounts.csvsecure_file_priv以便只能从该目录加载文件。

mysql> SHOW VARIABLES LIKE "secure_file_priv";
+------------------+-----------------------+
| Variable_name    | Value                 |
+------------------+-----------------------+
| secure_file_priv | /var/lib/mysql-files/ |
+------------------+-----------------------+
1 row in set (0.01 sec)
阿曼

看来“到期日期”中的空格可能会让您失望。在命令行上,您需要--columns在保留反引号的同时引用参数。

mysqlimport --columns="`head -n 1 discounts.csv`" \
--ignore-lines=1 temp discounts.csv -u root -p

表列名称实际上是带有空格的“过期日期”吗?如果是这样,则需要在带有反引号的csv文件中说明该问题。

id,title,`expired date`,amount

另外,如果文件格式不同于默认值,请确保指定文件格式

以'\ t'终止的字段,以'\'以'\'终止的行,以'\ n'终止的行,以''

就你而言

--fields-terminated-by=','  --fields-optionally-enclosed-by='"'

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

通过命令行将大型SQL文件导入MySql

来自分类Dev

从命令行将参数导入Powershell_ISE

来自分类Dev

从命令行导入PostgreSQL CSV

来自分类Dev

从命令行将文件包含在项目中

来自分类Dev

从命令行将数据从csv文件加载到oracle表

来自分类Dev

我可以从命令行将文件标记为最近使用吗?

来自分类Dev

在msbuild中从命令行导入.targets文件

来自分类Dev

使用命令行将* .xls或* .xlsx文件转换为管道分隔的.csv文件

来自分类Dev

使用命令行将.CSV转换为.XLSX

来自分类Dev

如何从命令行将导入添加到REPL?

来自分类Dev

使用bq命令行将文件从GBQ提取到没有csv标头的GCS

来自分类Dev

从命令行导入PyCharm设置

来自分类Dev

从命令行导入Python

来自分类Dev

从命令行将多个文件中的列提取到单个输出文件中

来自分类Dev

从命令行将多个文件中的列提取到单个输出文件中

来自分类Dev

如何从命令行将Excel文件转换为calc文件?

来自分类Dev

无法从命令行解析csv文件

来自分类Dev

使用命令行将my.cnf文件复制到Mysql目录

来自分类Dev

从命令行将数据放入php:// input

来自分类Dev

从命令行将绑定或参数传递给ERB

来自分类Dev

如何从命令行将ppt转换为pdf?

来自分类Dev

从命令行将图像批量旋转180度

来自分类Dev

从命令行将参数传递给python脚本

来自分类Dev

从命令行将 Windows 共享挂载为来宾

来自分类Dev

从命令行将消息放入 MQ 队列

来自分类Dev

如何从命令行将Charles会话保存到文件?

来自分类Dev

sqlite3:从命令行将架构转储到.sql文件中

来自分类Dev

如何从命令行将常规文件打印为pdf

来自分类Dev

如何从命令行将环境变量传递给Codeception YML文件?

Related 相关文章

热门标签

归档