将MySQL结果写入Google云端存储中的CSV文件

时间:2017-10-05 20:35:16

标签: python mysql csv google-app-engine google-cloud-storage

我需要在Google云端存储空间的一个存储桶中用MySQL以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环境中编写文件而且我也无法从here之类的元组创建CSV字符串,因为它的大小o我的结果集(实际上,我尝试了它并且它需要很长时间并且在完成之前超时)。

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

1 个答案:

答案 0 :(得分:1)

我刚刚遇到了与PHP相同的问题。我最终使用cloud 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)将返回名称为'的操作。属性。您可以使用此名称'并轮询操作/获取端点(https://cloud.google.com/sql/docs/mysql/admin-api/v1beta4/operations/get),直到状态返回为DONE
  5. 我们有一个工作,每晚在6个表上执行这些步骤(以及使用/ import命令导入)并且还没有看到任何问题。唯一要记住的是,一次只能在一个数据库实例上运行一个操作。要解决这个问题,您应该从操作列表端点(https://cloud.google.com/sql/docs/mysql/admin-api/v1beta4/operations/list)中的顶部项目确认数据库已准备就绪,然后再发出任何命令。