Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/330.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/google-app-engine/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用应用程序引擎Python将内容从大型CSV上传到CloudSQL_Python_Google App Engine_Csv_Google Cloud Storage_Google Cloud Sql - Fatal编程技术网

使用应用程序引擎Python将内容从大型CSV上传到CloudSQL

使用应用程序引擎Python将内容从大型CSV上传到CloudSQL,python,google-app-engine,csv,google-cloud-storage,google-cloud-sql,Python,Google App Engine,Csv,Google Cloud Storage,Google Cloud Sql,我对谷歌应用程序引擎相当陌生 我需要做的是将一个相当大的CSV上传到CloudSQL。 我有一个HTML页面,有一个文件上传模块,当上传到Blobstore时 之后,我用Blob读取器打开CSV,并使用cursor.execute(“插入表值”)执行CloudSQL的每一行。这里的问题是,我只能执行HTTP请求一分钟,而不是在这么短的时间内插入所有数据。它还使屏幕处于加载状态,如果可能的话,我希望通过在后端运行代码来避免这种情况 我还尝试了“加载数据本地填充”的方式 当我通过终端连接到Cloud

我对谷歌应用程序引擎相当陌生

我需要做的是将一个相当大的CSV上传到CloudSQL。 我有一个HTML页面,有一个文件上传模块,当上传到Blobstore时

之后,我用Blob读取器打开CSV,并使用cursor.execute(“插入表值”)执行CloudSQL的每一行。这里的问题是,我只能执行HTTP请求一分钟,而不是在这么短的时间内插入所有数据。它还使屏幕处于加载状态,如果可能的话,我希望通过在后端运行代码来避免这种情况

我还尝试了“加载数据本地填充”的方式

当我通过终端连接到CloudSQL时,“加载数据本地填充”可以从我的本地机器工作。而且很快。 我将如何在应用程序引擎中使用此功能

或者在从HTML上传CSV后,有没有更好的方法直接通过Blobstore或Google云存储将大型CSV导入CloudSQL?
另外,是否可以将任务队列与Blob存储一起使用,然后将数据插入后端的CloudSQL中?

我对数据存储使用了类似的方法,而不是CloudSQL,但相同的方法可以应用于您的场景

  • 设置应用程序的非默认模块(以前是后端,现在已弃用)

  • 发送http请求,该请求将通过任务队列触发模块端点(以避免60秒的截止时间)

  • 使用带有CSV的mapreduce作为输入,并在map函数中对CSV的每一行执行操作(以避免内存错误,并在操作过程中出现任何错误时从其离开的位置恢复管道)

  • 编辑:根据OP请求细化map reduce,并消除taskqueue的使用

  • 阅读找到的文档中的mapreduce基础知识
  • 下载mapreduce的依赖项文件夹以使其工作(,)

  • 将文件下载到项目文件夹并另存为“custom\u input\u reader.py”

  • 现在将下面的代码复制到主_app.py文件中

  • main_app.py

    from mapreduce import base_handler
    from mapreduce import mapreduce_pipeline
    from custom_input_reader import GoogleStorageLineInputReader
    
    def testMapperFunc(row):
        # do process with csv row
        return
    
    class TestGCSReaderPipeline(base_handler.PipelineBase):
        def run(self):
            yield mapreduce_pipeline.MapPipeline(
                "gcs_csv_reader_job", 
                "main_app.testMapperFunc", 
                "custom_input_reader.GoogleStorageLineInputReader", 
                params={
                    "input_reader": { 
                            "file_paths": ['/' + bucketname + '/' + filename]
                        }
                })
    
  • 创建将启动映射作业的http处理程序
  • main_app.py

    class BeginUpload(webapp2.RequestHandler):
        # do whatever you want
        upload_task = TestGCSReaderPipeline()
        upload_task.start()
        # do whatever you want
    
  • 如果要传递任何参数,请在“run”方法中添加参数,并在创建管道对象时提供值

  • 您可以尝试通过云控制台导入CSV数据:


    谢谢你的提示!我面前有很多书要读。您能再解释一下非默认模块部分以及我应该如何使用它吗?我现在正在阅读任务队列。目前看来这是可行的。我需要一些时间来理解Mapreduces@MetalloyD即使没有模块也可以。我使用模块只是为了使处理程序不是主应用程序的一部分。我将编辑我的答案以详细说明mapreduce部分。好的,谢谢!:顺便问一下,是否可以使用任务队列处理BLOB?我有一个UploadHandler类,它接受CSV导入并处理它。我使用JINJA2来放置blobstore.create\u upload\u url()链接用于文件上传。我可以使用JINJA2中的任务队列吗?因为如果我从UploadHandler类调用任务队列,我将丢失到该文件的链接。在进行任务队列调用时,我只能在参数中传递字符串。所以基本上我要说的是我的JINJA指向/uploadcsv,我的任务队列是/worker。如果我从上传CSV类调用/worker,我将丢失文件链接thx@MetalloyD我不确定我是否完全理解你的问题。如果您使用Blob存储CSV,我建议您使用GCS并按照我的建议将CSV存储为简单文件。另一方面,我不明白调用任务队列时丢失链接是什么意思。请详细说明并提供问题中的编辑,以便我可以在可能的情况下提供帮助。不过,我需要通过Python进行编辑。以编程方式。