2017-10-05 36 views
0

Google Cloud Storageのバケットの中にMySQLのina csv形式の結果セットを書き込む必要があります。Google Cloud StorageのCSVファイルにMySQLの結果を書き込む

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()に起因している」動作しませんでした:指示here

は、私は次のコード例を作成しました。

GAE環境でファイルを書き込めないため、hereのようにタプルからCSV文字列を作成できないため、this approach(または類似のもの)を使用できません。実際には、私はそれを試して、それは時間がかかりすぎると終了する前にタイムアウトする)。

私の質問は、結果セットをMySQLから取得し、Google Cloud Storage BucketにCSVとして保存する最良の方法です。

+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. 輸出バケット(すなわちテスト輸出)を作成し、ステップ1で作成したバケットにSQLインスタンス読み取り/書き込み権限を与えます
    2. アプリケーション内で、インスタンスエクスポート(https://cloud.google.com/sql/docs/mysql/admin-api/v1beta4/instances/export)を呼び出します。このエンドポイントは、実行するSQLと出力バケットへのパスを受け入れます。 (ステップ(1)で作成)
    3. ステップ(3)は、 'name'プロパティを持つ操作を返します。あなたは

    を行ったように、ステータスが返されるまで、私たちは、毎晩の手順を実行したジョブ(だけでなく、/ importコマンドを使用してインポートを持っているこの「名前」と操作/エンドポイントを取得ポーリング(https://cloud.google.com/sql/docs/mysql/admin-api/v1beta4/operations/get)を使用することができます)6つのテーブルにはまだ問題を参照していない。注意する必要があるのは、一度に1つのデータベースインスタンスに対して実行できる演算は1つだけです。これに対処するには、操作リストエンドポイント(https://cloud.google.com/sql/docs/mysql/admin-api/v1beta4/operations/list)の一番上の項目で、コマンドを発行する前にデータベースが準備完了であることを確認する必要があります。

  • 関連する問題