Créer une table mysql directement à partir du fichier CSV en utilisant le moteur de stockage CSV?
Je viens d'apprendre que Mysql a un moteur de stockage CSV natif {[2] } qui stocke les données dans un fichier de valeurs séparées par des virgules par table.
Est-il possible de créer une table directement à partir d'un fichier CSV téléchargé, quelque chose comme:
CRÉER DES UTILISATEURS DE TABLE
Où les utilisateurs.csv est téléchargé par l'utilisateur?
12 réponses
Ce n'est pas possible. Pour créer une table, vous avez besoin d'un schéma de table. Ce que vous avez est un fichier de données. Le schéma ne peut pas être créé avec lui. Ce que vous pouvez faire est de vérifier si votre fichier a une ligne d'en-tête. Dans ce cas, vous pouvez créer une table en utilisant cette ligne d'en-tête mais manuellement.
Cependant, il existe un moyen de générer une instruction create table par un fichier batch comme décrit par John Swapceinski dans la section commentaire du manuel MySQL .
Posté par John Swapceinski le septembre 5 2011 5:33am.
Créer une table en utilisant le .en-tête du fichier csv:
#!/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) );"
Vient de découvrir csvkit , qui est un ensemble d'outils de ligne de commande unix pour les fichiers CSV. Installé sur mon Mac avec pip install csvkit
et la commande était:
csvsql --dialect mysql --snifflimit 100000 bigdatafile.csv > maketable.sql
Vous pouvez également fournir une chaîne de connexion db et charger la table directement.
Je sais que c'est un peu périmé en tant que sujet, mais il y a un moyen plus facile-si-vous utilisez phpmyadmin comme frontal mysql.
1) créez une base de données avec seulement les paramètres par défaut.
2) Sélectionnez la base de données.
3)Cliquez sur "Importer" en haut de l'écran.
4) sélectionnez CSV sous "Format".
5) Choisissez les options appropriées à votre fichier csv (ouvrez le fichier csv dans un éditeur de texte et référencez-le pour obtenir des options "appropriées").
Si vous muck It up, pas de problème, il suffit de déposer la base de données et essayez à nouveau.
C'est ce qui m'a aidé. Ajoutez simplement votre fichier csv et vous êtes prêt à partir.
Il est recommandé d'utiliser MySQL Workbench où sont les données d'importation. Workbench permet à l'utilisateur de créer une nouvelle table à partir d'un fichier au format CSV ou JSON. Il gère le schéma de table et l'importation de données en quelques clics via l'Assistant.
Dans MySQL Workbench, utilisez le menu contextuel de la liste des tables et cliquez sur Table Data Import Wizard
.
Plus de la Documentation de MySQL Workbench 6.5.1 Table Data Export and Import Wizard . téléchargez MySQL Workbench ici.
En plus des autres solutions mentionnées, les utilisateurs de Mac peuvent noter que SQL Pro a une option D'importation CSV qui fonctionne assez bien et est flexible - vous pouvez changer les noms de colonnes et les types de champs à l'importation. Choisissez une nouvelle table sinon le dialogue initial peut sembler quelque peu décourageant.
SQL Pro: http://www.sequelpro.com Sequel Pro-application de gestion de base de données pour travailler avec des bases de données MySQL
Si quelqu'un cherche PHP solutin:
Paquet: 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();
J'ai adopté le script de shiplu.mokadd.im pour répondre à mes besoins. Qui il intéresse:
#!/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));"
J'ai fait un outil de ligne de commande Windows qui fait exactement cela.
Vous pouvez le télécharger ici: http://commandline.dk/csv2ddl.htm
Utilisation:
C:\Temp>csv2ddl.exe mysql test.csv test.sql
Ou
C:\Temp>csv2ddl.exe mysql advanced doublequote comma test.csv test.sql
MySQL pour excel plugin peut vous aider.
Http://dev.mysql.com/doc/refman/5.6/en/mysql-for-excel.html
Ouvrez votre fichier CSV dans excel. Vous pouvez utiliser ce plugin pour exporter des données excel dans une nouvelle table de serveur mysql distant ou local. Il analysera vos données (100 à 1000 lignes) et créera un schéma de table correspondant.
Ce n'est pas possible, vous pouvez cependant écraser un fichier de table existant. Mais assurez-vous que les fins de ligne dans votre fichier sont de style unix (se terminant uniquement par \n), pas de style windows (se terminant par \r\n), que vous travailliez sous windows ou non.
Si vous êtes d'accord avec l'utilisation de Python, les Pandas ont très bien fonctionné pour moi (csvsql pendu pour toujours pour mon cas). Quelque chose comme:
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)
Cela ne résout pas non plus la partie "Utilisation du moteur CSV" qui faisait partie de la question mais pourrait aussi m'être utile.