【问题标题】:Bulk Upload with Google App Engine Datastore via CSV通过 CSV 使用 Google App Engine Datastore 批量上传
【发布时间】:2013-05-28 13:33:36
【问题描述】:

我正在使用 Python 构建一个 GAE webapp。我也在使用数据存储并尝试使用终端和 CSV 文件将数据批量上传到数据库:

https://developers.google.com/appengine/docs/python/tools/uploadingdata

我在我的应用根目录中的一个单独的.py 文件中创建了一个 Loader 类。我不确定这个加载器类是否应该在我的 main.py webapp 文件中,或者根目录中的另一个文件中。

加载器类:

import datetime
from google.appengine.ext import db
from google.appengine.tools import bulkloader
import models


class FTSELoader(bulkloader.Loader):
    def __init__(self):
        bulkloader.Loader.__init__(self, 'FTSE',
                               [('date', lambda x: datetime.datetime.strptime(x, '%Y/%m/%d')),                                 
                               ('close', float)])
loaders = [FTSELoader]

我尝试创建/上传的类(即我的数据存储表)称为“FTSE”。然后我在终端中运行这个命令:

appcfg.py upload_data --config_file=FTSEdataloader.py --filename=FTSEdata.csv --      kind=FTSE --url=http://<myapp.appspot.com>/_ah/remote_api

我收到以下错误:

文件“FTSEdataloader.py”,第 4 行,在 导入模型 ImportError:没有名为模型的模块

我没有像 GAE 演示中那样的“models.py”。应该用什么代替它?

谢谢

【问题讨论】:

  • 如果models.py中没有,你的模型在哪里定义?
  • 对不起,我是编程新手,所以不确定我是否完全理解。为了在数据库中定义我的表,我的 main.py 应用程序文件中有类。那么这应该是“import main.py”吗?代替?
  • 通常将模型放在自己的文件中,称为 models.py。在 main.py 中,您可以使用 from .models import MyModel 导入它们。通过这样做,您将避免在应用程序增长时出现的循环导入问题

标签: google-app-engine google-cloud-datastore


【解决方案1】:

我遇到了同样的问题。我不确定为什么 appcfg.py 在运行上传脚本时找不到模型模块。我通过这样做解决了这个问题:

import datetime
from google.appengine.ext import db
from google.appengine.tools import bulkloader

class FTSE(db.Model):
    date = DateTimeProperty()
    close = FloatProperty()

class FTSELoader(bulkloader.Loader):
    def __init__(self):
        bulkloader.Loader.__init__(self, 'FTSE',
                           [('date', lambda x: datetime.datetime.strptime(x, '%Y/%m/%d')),                                 
                           ('close', float)])
loaders = [FTSELoader]

基本上,它只是将您的模型定义放入bulkloader。这当然不是最好的方法,但它可以解决 appcfg.py 在运行批量上传时似乎遇到的 PYTHONPATH 问题。

【讨论】:

    【解决方案2】:

    您可以使用 Python 代码文件来执行此操作。该文件为正在创建的实体导入或定义模型类,为您希望导入的每种类型定义一个加载器类,并在全局变量中声明可用的加载器类。

    例如,假设您在名为 models.py 的文件中定义了一个名为“FTSE”的模型类(该文件位于您的 PYTHON PATH 中,例如您将运行工具的目录,例如:C:\Python27)类似于以下内容:

    models.py

    from google.appengine.ext import db
    
    class FTSE(db.Model):
       date = db.DateProperty()
       close = db.FloatProperty()
    

    【讨论】:

      猜你喜欢
      • 2010-10-19
      • 1970-01-01
      • 1970-01-01
      • 2013-04-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-08-15
      • 2010-10-20
      相关资源
      最近更新 更多