2014-09-24 3 views
2

Google Cloud SQL ограничивает использование LOAD DATA INFILE в операциях SQL.Импорт данных в Google Cloud SQL через CSV

Я пытаюсь создать функцию, которая позволит пользователям загружать пользовательские данные в мое веб-приложение, поэтому им не нужно делать каждую запись по одному.

Как я могу это сделать в рамках ограничений GAE PHP и Cloud SQL?

Обновление: Пользователи моего приложения могут управлять списком студентов. Я хочу, чтобы мои пользователи могли отправлять CSV-файл и вводить его в свою базу данных. Я не могу использовать sync или MySQL workbench и т. Д. Это нужно сделать в веб-приложении.

Спасибо за ваш ввод!

+0

Вы заглянули в этот ответ? http://stackoverflow.com/questions/13814775/google-cloud-sql-alternative-to-load-data-infile – Mario

+0

Он не решает проблему. Я обновил свой пост с более подробной информацией. – Guy

+1

Вы можете создать модуль GAE, который берет эти CSV-файлы и преобразует их для импорта операторов SQL, а другой модуль будет загружать их в экземпляры Cloud SQL. Все это должно выполняться асинхронно. Как вы думаете, почему другая публикация не связана? Я вижу отношения. – Mario

ответ

0

Единственный способ, которым я могу это сделать, - создать PHP-скрипт для чтения файла и вставить его в базу данных с помощью операторов SQL INSERT, нормального способа, с помощью которого вы вставляете данные в экземпляр cloudSQL.

1

Я тоже недавно искал способ для мощных пользователей массовой загрузки. Моя первая успешная попытка была переменной, поэтому проверьте мое сопоставление. Это пробное завершение было завершено без интерфейса, поэтому вам нужно будет создать форму для загрузки пользователями в ваше ведро. Мой ответ предполагает знакомство с Google Storage.

<?php 

$databasehost = ":/cloudsql/something:here"; //Name of your CLOUD SQL INSTANCE ID 
$databasename = "db"; 
$databaseusername ="insert_usr"; 
$databasepassword = "pwd"; 
$csv = "gs://APPID.appspot.com/csv_uploads/bulk.csv"; //APPID is the specific name of your app, followed by other bucket(s), if any, and the filename.csv 

$column0 = ''; //insert the name of your columns as appeared in MySQL 
$column1 = ''; 
$column2 = ''; 
$column3 = ''; 
$column4 = ''; 
$column5 = ''; 
$column6 = ''; 
$column7 = ''; 
$column8 = ''; 
$column9 = ''; 
$column10 = ''; 
$column11 = ''; 

$con = @mysql_connect($databasehost,$databaseusername,$databasepassword) or die(mysql_error()); //Don't remember why I added '@' might be error 
@mysql_select_db($databasename) or die(mysql_error()); 

$csv_file = $csv; // Name of your CSV file 
$csvfile = fopen($csv_file, 'r'); 
$theData = fgets($csvfile); 
$i = 0; 
while (!feof($csvfile)) { 
$csv_data[] = fgets($csvfile); 
$csv_array = explode(",", $csv_data[$i]); 
$insert_csv = array(); 
$insert_csv[$column0] = $csv_array[0]; //array[#] correspondes to columns in order 
$insert_csv[$column1] = $csv_array[1]; 
$insert_csv[$column2] = $csv_array[2]; 
$insert_csv[$column3] = $csv_array[3]; 
$insert_csv[$column4] = $csv_array[4]; 
$insert_csv[$column5] = $csv_array[5]; 
$insert_csv[$column6] = $csv_array[6]; 
$insert_csv[$column7] = $csv_array[7]; 
$insert_csv[$column8] = $csv_array[8]; 
$insert_csv[$column9] = $csv_array[9]; 
$insert_csv[$column10] = $csv_array[10]; 
$insert_csv[$column11] = $csv_array[11]; 

$query = " 
INSERT INTO TABLENAME(".$column1.",".$column1.",".$column2.",".$column3.",".$column4.",".$column5.",".$column6.",".$column7.",".$column7.",".$column9.",".$column10.",".$column11.",) 
VALUES('".$insert_csv[$column0]."','".$insert_csv[$column1]."','".$insert_csv[$column2]."','".$insert_csv[$column3]."','".$insert_csv[$column4]."','".$insert_csv[$column5]."','".$insert_csv[$column6]."','".$insert_csv[$column7]."','".$insert_csv[$column8]."','".$insert_csv[$column9]."','".$insert_csv[$column10]."','".$insert_csv[$column11]."')"; 
$n=mysql_query($query, $con); 
$i++; 
} 
fclose($csvfile); 

echo "File data successfully imported to database!!"; 
mysql_close($con); 
?> 

В моем процессе, строки со специальными символами (одиночные и двойные кавычки и переносы, что я могу вспомнить) не импортируют поэтому обратите внимание на ваш ROW_COUNT().