mysqlテーブルにcsvファイルをアップロードするための最良/最速の方法は何ですか?データの最初の行を列名として使用したいと思います。
これが見つかりました:
しかし、唯一の答えは、GUIではなくシェルを使用することでしたか?
mysqlテーブルにcsvファイルをアップロードするための最良/最速の方法は何ですか?データの最初の行を列名として使用したいと思います。
これが見つかりました:
しかし、唯一の答えは、GUIではなくシェルを使用することでしたか?
回答:
CSVファイルから情報を取得するスクリプトを作成する代わりに、MYSQLを直接それにリンクし、次のSQL構文を使用して情報をアップロードできます。
ExcelファイルをMySQLにインポートするには、まずCSVファイルとしてエクスポートします。生成されたCSVファイルからCSVヘッダーを削除し、ExcelがCSVファイルの最後に入力した空のデータを削除します。
その後、次のコマンドを実行して、MySQLテーブルにインポートできます。
load data local infile 'uniq.csv' into table tblUniq fields terminated by ','
enclosed by '"'
lines terminated by '\n'
(uniqName, uniqCity, uniqComments)
あなたのケースでは、最初の行を見つけて列名として割り当てるために、最初にインタープリターを書く必要があります。
構文に関するLOAD DATA
MySQLドキュメントから:
この
IGNORE number LINES
オプションを使用すると、ファイルの先頭の行を無視できます。たとえば、IGNORE 1 LINES
列名を含む最初のヘッダー行をスキップするために使用できます。LOAD DATA INFILE '/tmp/test.txt' INTO TABLE test IGNORE 1 LINES;
したがって、次のステートメントを使用できます。
LOAD DATA LOCAL INFILE 'uniq.csv'
INTO TABLE tblUniq
FIELDS TERMINATED BY ','
ENCLOSED BY '"'
LINES TERMINATED BY '\n'
IGNORE 1 LINES
(uniqName, uniqCity, uniqComments)
IGNORE 1 LINES
に、クエリに追加できます
以下は、必要なことを行う単純なPHPコマンドラインスクリプトです。
<?php
$host = 'localhost';
$user = 'root';
$pass = '';
$database = 'database';
$db = mysql_connect($host, $user, $pass);
mysql_query("use $database", $db);
/********************************************************************************/
// Parameters: filename.csv table_name
$argv = $_SERVER[argv];
if($argv[1]) { $file = $argv[1]; }
else {
echo "Please provide a file name\n"; exit;
}
if($argv[2]) { $table = $argv[2]; }
else {
$table = pathinfo($file);
$table = $table['filename'];
}
/********************************************************************************/
// Get the first row to create the column headings
$fp = fopen($file, 'r');
$frow = fgetcsv($fp);
foreach($frow as $column) {
if($columns) $columns .= ', ';
$columns .= "`$column` varchar(250)";
}
$create = "create table if not exists $table ($columns);";
mysql_query($create, $db);
/********************************************************************************/
// Import the data into the newly created table.
$file = $_SERVER['PWD'].'/'.$file;
$q = "load data infile '$file' into table $table fields terminated by ',' ignore 1 lines";
mysql_query($q, $db);
?>
最初の行に基づいてテーブルを作成し、残りの行をそこにインポートします。コマンドライン構文は次のとおりです。
php csv_import.php csv_file.csv table_name
fields terminated by ','
...部分的に二重引用符で囲まれたCSVでも動作します
ENCLOSED BY '\"'
...また、多くの人々が必要とするLINES TERMINATED BY '\r\n'
WindowsからのCSVを使用している場合。:そして最後に、バッククォートでフィールド名をエスケープすることは、スペースがある場合には賢明です$columns .= "`$column` varchar(250)";
テキストファイルまたはcsvファイルからデータをロードするには、コマンドは次のとおりです。
load data local infile 'file-name.csv'
into table table-name
fields terminated by '' enclosed by '' lines terminated by '\n' (column-name);
上記のコマンドでは、私の場合、読み込まれる列が1つしかないため、「終了」と「囲まれ」がないため、空白のままにしておくと、プログラマーが分離文字を入力できます。たとえば。、(コンマ)または "または;または任意のもの。
** mysqlバージョン5以上を使用している人向け**
ファイルをmysqlにロードする前に、以下の2行がサイドに追加されていることを確認する必要があります etc/mysql/my.cnf
my.cnfコマンドを編集するには
sudo vi /etc/mysql/my.cnf
[mysqld]
local-infile
[mysql]
local-infile
私はこれを行うためにいくつかのコードを書きました、私はいくつかのスニペットを入れます:
$dir = getcwd(); // Get current working directory where this .php script lives
$fileList = scandir($dir); // scan the directory where this .php lives and make array of file names
次に、CSVヘッダーを取得して、mysqlにインポート方法を指示できるようにします(注:mysql列がcsv列と正確に一致していることを確認してください)。
//extract headers from .csv for use in import command
$headers = str_replace("\"", "`", array_shift(file($path)));
$headers = str_replace("\n", "", $headers);
次に、mysqlサーバーにクエリを送信します。
mysqli_query($cons, '
LOAD DATA LOCAL INFILE "'.$path.'"
INTO TABLE '.$dbTable.'
FIELDS TERMINATED by \',\' ENCLOSED BY \'"\'
LINES TERMINATED BY \'\n\'
IGNORE 1 LINES
('.$headers.')
;
')or die(mysql_error());
しばらくこれに取り組みました。問題は、データをロードする方法ではなく、それを保持するテーブルを作成する方法にあります。データをインポートする前に、DDLステートメントを生成してテーブルを作成する必要があります。
テーブルに多数の列がある場合は特に困難です。
これが(ほぼ)仕事をするPythonスクリプトです:
#!/usr/bin/python
import sys
import csv
# get file name (and hence table name) from command line
# exit with usage if no suitable argument
if len(sys.argv) < 2:
sys.exit('Usage: ' + sys.argv[0] + ': input CSV filename')
ifile = sys.argv[1]
# emit the standard invocation
print 'create table ' + ifile + ' ('
with open(ifile + '.csv') as inputfile:
reader = csv.DictReader(inputfile)
for row in reader:
k = row.keys()
for item in k:
print '`' + item + '` TEXT,'
break
print ')\n'
解決しなければならない問題は、最終的なフィールド名とデータ型宣言がカンマで終了することであり、mySQLパーサーはこれを許容しません。
もちろん、すべてのフィールドにTEXTデータ型を使用するという問題もあります。テーブルに数百の列がある場合、VARCHAR(64)はテーブルを大きくしすぎます。
これは、mySQLの最大列数でも壊れるようです。可能な場合は、HiveまたはHBaseに移行するときです。
これは、csvとMySQLコネクタを使用してPythonで実行した方法です。
import csv
import mysql.connector
credentials = dict(user='...', password='...', database='...', host='...')
connection = mysql.connector.connect(**credentials)
cursor = connection.cursor(prepared=True)
stream = open('filename.csv', 'rb')
csv_file = csv.DictReader(stream, skipinitialspace=True)
query = 'CREATE TABLE t ('
query += ','.join('`{}` VARCHAR(255)'.format(column) for column in csv_file.fieldnames)
query += ')'
cursor.execute(query)
for row in csv_file:
query = 'INSERT INTO t SET '
query += ','.join('`{}` = ?'.format(column) for column in row.keys())
cursor.execute(query, row.values())
stream.close()
cursor.close()
connection.close()
キーポイント
mysqlテーブルにCSVファイルをインポートする
LOAD DATA LOCAL INFILE 'd:\\Site.csv' INTO TABLE `siteurl` FIELDS TERMINATED BY ',' ENCLOSED BY '"' LINES TERMINATED BY '\r\n';
Character Escape Sequence
\0 An ASCII NUL (0x00) character
\b A backspace character
\n A newline (linefeed) character
\r A carriage return character
\t A tab character.
\Z ASCII 26 (Control+Z)
\N NULL
訪問:http : //www.webslessons.com/2014/02/import-csv-files-using-php-and-mysql.html
他の人が述べたように、データのローカルローカルファイルの読み込みは問題なく機能します。Hawkeeが投稿したphpスクリプトを試しましたが、うまくいきませんでした。それをデバッグするのではなく、ここで私がやったことです:
1)CSVファイルのヘッダー行をテキストファイルにコピーして貼り付け、emacsで編集します。各フィールドの間にコンマとCRを追加して、それぞれの行に入力します。
2)そのファイルをFieldList.txtとして保存します。3
)各フィールドの定義を含めるようにファイルを編集します(ほとんどはvarcharでしたが、かなりの数はint(x)でした。作成テーブルのテーブル名を(ファイルの先頭に、)をファイルの終わり
。CreateTable.sql として保存4)テーブルを作成するためにCreatetable.sqlファイルからの入力でmysqlクライアントを
起動5)mysqlクライアントを起動し、テーブルを置き換える'LOAD DATA INFILE'コマンドのほとんどをコピーして貼り付け名前とcsvファイル名。FieldList.txtファイルに貼り付けます。フィールドリストに貼り付ける前に、必ず 'IGNORE 1 LINES'を含めてください
多くの作業のように聞こえますが、emacsで簡単に.....
私は、csvをmysqlにインポートする方法、「データをファイルに読み込む」を含める方法、mysqlワークベンチを使用する方法など、さまざまな方法でグーグル検索しています。
mysqlワークベンチのインポートボタンを使用するときは、まず自分で空のテーブルを作成し、各列のタイプを自分で設定する必要があります。注:nullやauto_incrementではなく、主キーとしてID列を最後に追加する必要があります。そうしないと、後でインポートボタンが表示されなくなります。しかし、CSVファイルの読み込みを開始すると、何も読み込まれず、バグのように見えます。あきらめる。
ラッキー、これまでに見つけた最も簡単な方法は、OracleのmysqlをExcelに使用することです。あなたはここからmysql用にダウンロードできます
これはあなたがやろうとしていることです:Excelでcsvファイルを開き、(データ)タブで、mysqlをExcelボタンで見つけます
すべてのデータを選択し、[mysqlにエクスポート]をクリックします。ID列を主キーとして設定することに注意してください。
終了したら、mysqlワークベンチに移動してテーブルを変更します。たとえば、通貨タイプは、通常の使用では大量のdecimal(10,2)の場合はdecimal(19,4)である必要があります。他のフィールドタイプはvarchar(255)に設定できます。