2017-10-05 147 views
0

我需要在Google云端存储中的存储区中写入MySQL ina csv格式的结果集。将MySQL结果写入Google云端存储中的CSV文件

依照指示操作,here,我创建了下面的示例代码:

import cloudstorage 
from google.appengine.api import app_identity 
import db # My own Mysql wrapper 

dump = db.get_table_dump(schema) # Here I made a simples SQL SELECT and fetchall() 
bucket_name = app_identity.get_default_gcs_bucket_name() 
file_name = "/" + bucket_name + "/finalfiles/" + schema + "/" +"myfile.csv" 
with cloudstorage.open(file_name, "w") as gcsFile: 
    gcsFile.write(dump) 

它没有工作“的原因write需要一个字符串参数和dump是元组的元组从fetchall()结果。

我不能使用this approach(或类似的),因为我不能在GAE环境中编写文件,而且由于我的结果集的大小,我也不能从元组中创建CSV字符串,如here(实际上,我尝试了它,它需要很长时间,并在完成之前超时)。

所以,我的问题是,从MySQL获取结果集并将其保存为CSV到Google云端存储桶中的最佳方式是什么?

+0

你能写入内存文件吗? –

+0

对不起@JohannesReichard,但我不明白你的问题。我在GAE有点新鲜感。内存文件是我可以写入的东西吗? – James

+1

我从来没有使用GAE,但python不仅支持写入硬盘上的文件,而且还支持类似于存储在内存中的对象的文件:docs.python.org/3/library/io.html#in-memory –

回答

1

我刚刚经历了与PHP相同的问题。我结束了使用云SQL API(https://cloud.google.com/sql/docs/mysql/admin-api/v1beta4/)具有以下流程:

  1. 创建导出桶(即检验出口)
  2. 给SQL实例读/写权限在步骤1中创建的斗
  3. 在应用程序中,调用实例导出(https://cloud.google.com/sql/docs/mysql/admin-api/v1beta4/instances/export)。该端点接受要运行的SQL以及输出存储桶的路径。 (在步骤(1)中创建)
  4. 步骤(3)将返回带有'name'属性的操作。您可以使用此“名称”和轮询业务为DONE

/返回获取端点(https://cloud.google.com/sql/docs/mysql/admin-api/v1beta4/operations/get),直到状态我们有夜间(以及使用/ import命令导入执行这些步骤的工作)在6张桌子上,还没有看到任何问题。唯一要记住的是一次只能在单个数据库实例上运行一个操作。为了解决这个问题,您应该在操作列表端点(https://cloud.google.com/sql/docs/mysql/admin-api/v1beta4/operations/list)的首要项目之前确认数据库已准备好,然后再发出任何命令。

相关问题