使用CSV存储引擎直接从CSV文件创buildmysql表?

我刚刚了解到,Mysql有一个本机CSV存储引擎 ,它将数据存储在每个表的逗号分隔值文件中。

是否可以直接从上传的CSV文件创build表格,如下所示:

创build表用户<PATH / USERS.CSV

users.csv是由用户上传的?

这不可能。 要创build表,你需要一个表模式。 你有什么是一个数据文件。 架构不能用它来创build。 你可以做的是检查你的文件是否有标题行。 在这种情况下,您可以使用该标题行手动创build表格。

但是,有一种方法可以通过batch file生成create table语句,如John Swapceinski在MySQL手册的注释部分所述 。

发贴者John Swapceinski时间:2011年9月5日上午5:33
使用.csv文件的标题创build一个表格:

#!/bin/sh # pass in the file name as an argument: ./mktable filename.csv echo "create table $1 ( " head -1 $1 | sed -e 's/,/ varchar(255),\n/g' echo " varchar(255) );" 

刚刚发现了csvkit ,这是一组用于CSV文件的unix命令行工具。 在我的Mac上pip install csvkitpip install csvkit ,命令是:

  csvsql --dialect mysql --snifflimit 100000 bigdatafile.csv > maketable.sql 

您也可以提供一个数据库连接string,它可以直接加载表。

我知道这是一个有点陈旧的主题,但有一个更简单的方法 – 如果你使用phpmyadmin作为你的mysql前端。

1)创build一个只有默认设置的数据库。

2)select数据库。

3)点击屏幕顶部的“导入”。

4)在“格式”下selectCSV。

5)select适合您csv文件的选项(在文本编辑器中打开csv文件并引用它以获得“适当的”选项)。

如果你把它搞糊涂了,没问题,只要放下数据库然后再试一次。

除了上面提到的其他解决scheme之外,Mac用户可能还要注意,SQL Pro有一个CSV导入选项,工作得很好,而且很灵活 – 您可以在导入时更改列名和字段types。 select新表,否则最初的对话可能会显得有些沮丧。

SQL Pro: http : //www.sequelpro.com Sequel Pro – 用于处理MySQL数据库的数据库pipe理应用程序

这是对我的帮助。 只需添加您的CSV文件,你就可以走了。

http://www.convertcsv.com/csv-to-sql.htm

如果有人正在寻找php solutin:

包: https : //github.com/uzi88/PHP_MySQL_wrapper

 $db = new MySQL_wrapper(MySQL_HOST, MySQL_USER, MySQL_PASS, MySQL_DB); $db->connect(); // this sample gets column names from first row of file //$db->createTableFromCSV('test_files/countrylist.csv', 'csv_to_table_test'); // this sample generates column names $db->createTableFromCSV('test_files/countrylist1.csv', 'csv_to_table_test_no_column_names', ',', '"', '\\', 0, array(), 'generate', '\r\n'); /** Create table from CSV file and imports CSV data to Table with possibility to update rows while import. * @param string $file - CSV File path * @param string $table - Table name * @param string $delimiter - COLUMNS TERMINATED BY (Default: ',') * @param string $enclosure - OPTIONALLY ENCLOSED BY (Default: '"') * @param string $escape - ESCAPED BY (Default: '\') * @param integer $ignore - Number of ignored rows (Default: 1) * @param array $update - If row fields needed to be updated eg date format or increment (SQL format only @FIELD is variable with content of that field in CSV row) $update = array('SOME_DATE' => 'STR_TO_DATE(@SOME_DATE, "%d/%m/%Y")', 'SOME_INCREMENT' => '@SOME_INCREMENT + 1') * @param string $getColumnsFrom - Get Columns Names from (file or generate) - this is important if there is update while inserting (Default: file) * @param string $newLine - New line delimiter (Default: \n) * @return number of inserted rows or false */ // function createTableFromCSV($file, $table, $delimiter = ',', $enclosure = '"', $escape = '\\', $ignore = 1, $update = array(), $getColumnsFrom = 'file', $newLine = '\r\n') $db->close(); 

我采用了shiplu.mokadd.im的脚本来适应我的需求。 他感兴趣的是:

 #!/bin/bash if [ "$#" -lt 2 ]; then if [ "$#" -lt 1 ]; then echo "usage: $0 [path to csv file] <table name> > [sql filename]" exit 1 fi TABLENAME=$1 else TABLENAME=$2 fi echo "CREATE TABLE $TABLENAME ( " FIRSTLINE=$(head -1 $1) # convert lowercase characters to uppercase FIRSTLINE=$(echo $FIRSTLINE | tr '[:lower:]' '[:upper:]') # remove spaces FIRSTLINE=$(echo $FIRSTLINE | sed -e 's/ /_/g') # add tab char to the beginning of line FIRSTLINE=$(echo "\t$FIRSTLINE") # add tabs and newline characters FIRSTLINE=$(echo $FIRSTLINE | sed -e 's/,/,\\n\\t/g') # add VARCHAR FIRSTLINE=$(echo $FIRSTLINE | sed -e 's/,/ VARCHAR(255),/g') # print out result echo -e $FIRSTLINE" VARCHAR(255));" 

我build议使用MySQL Workbench,其中是导入数据。 还可以从CSV或JSON中创build新表。

在MySQL Workbench应用程序中使用表列表中的上下文菜单并使用

表数据导入向导

MySQL工作台图像

Link for MySQL Workbench。 https://dev.mysql.com/doc/workbench/en/wb-admin-export-import-table.html

我已经做了一个Windows命令行工具,做到这一点。

你可以在这里下载: http : //commandline.dk/csv2ddl.htm

用法:

 C:\Temp>csv2ddl.exe mysql test.csv test.sql 

要么

 C:\Temp>csv2ddl.exe mysql advanced doublequote comma test.csv test.sql 

MySQL的Excel插件可以帮助你。

http://dev.mysql.com/doc/refman/5.6/en/mysql-for-excel.html

在Excel中打开您的CSV文件。 你可以使用这个插件将excel数据导出到远程或本地mysql服务器的新表中。 它会分析你的数据(从前100到1000行),并创build一个相应的表模式。

这是不可能的,但是可以覆盖现有的表格文件。 但可以肯定的是,文件中的行结尾是unix风格(只以\ n结尾),而不是windows风格(以\ r \ n结尾),无论您是否在windows下工作。

如果你用Python可以的话,Pandas对我来说是非常棒的(csvsql会永远悬挂我的情况)。 就像是:

 from sqlalchemy import create_engine import pandas as pd df = pd.read_csv('/PATH/TO/FILE.csv') # Optional, set your indexes to get Primary Keys df = df.set_index(['COL A', 'COL B']) engine = create_engine('mysql://user:pass@host/db', echo=False) df.to_sql(table_name, dwh_engine, index=False) 

这也不能解决问题的一部分“使用CSV引擎”的一部分,但也可能有用。