2

我正在使用 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”。应该取而代之的是什么?

谢谢

4

2 回答 2

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 问题。

于 2014-02-07T15:22:21.190 回答
0

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

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

模型.py

from google.appengine.ext import db

class FTSE(db.Model):
   date = db.DateProperty()
   close = db.FloatProperty()
于 2013-11-14T05:40:17.553 回答