通过CSV将数据导入Google Cloud SQL

问题描述:

Google Cloud SQL限制在SQL语句中使用LOAD DATA INFILE通过CSV将数据导入Google Cloud SQL

我试图做一个功能,允许用户批量上传用户数据到我的网络应用程序,所以他们不必一一列出每个条目。

我该如何去完成这项限制GAE PHPCloud SQL

更新:我的应用程序的用户能够管理学生列表。我希望我的用户能够提交CSV文件并将其输入到他们的学生数据库中。我不能使用同步或MySQL工作台等。它必须在Web应用程序内完成。

感谢您的输入!

+0

你看过这个答案吗? http://*.com/questions/13814775/google-cloud-sql-alternative-to-load-data-infile – Mario 2014-09-24 06:43:27

+0

它没有解决问题。我更新了我的帖子,提供了更多细节。 – Guy 2014-09-24 08:51:00

+1

您可以构建一个GAE模块,它接受这些CSV文件并将其转换为导入SQL语句,另一个模块将它们上载到Cloud SQL实例。这一切都应该异步完成。你为什么认为其他职位不相关?我看到了这种关系。 – Mario 2014-09-24 09:16:59

我认为你可以这样做的唯一方法是创建一个PHP脚本来读取文件并使用SQL INSERT语句将其插入到数据库中,这是将数据插入到cloudSQL实例中的正常方式。

我最近也在寻找一种方式让电力用户批量上传。我第一次成功的尝试是变量特定的,所以检查我的映射此试用版在没有前端的情况下完成,因此您需要为用户创建一个表单以上传到您的存储分区。我的回答假定您熟悉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行()。