2013-05-28 81 views
2

我正在使用Python构建GAE web应用程序。我还使用了数据存储和使用终端和CSV文件每尝试批量上传数据到数据库:通过CSV通过Google App Engine数据存储批量上传

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

我在我的应用程序根目录中创建一个separate.py文件中的类加载器目录。我不确定这个loader类是否应该放在我的main.py webapp文件中,或者放在根目录下的其他文件中。

Loader类:

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] 

我的一种类(即我的数据存储表)我想创建/上传被称为“金融时报”。然后我在终端运行此命令:

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

我得到以下错误:

文件 “FTSEdataloader.py”,4号线,在 进口车型 导入错误:没有模块名为车型

我没有像GAE演示中的“models.py”。取而代之的是什么?

谢谢

+0

如果不在models.py中,您的模型定义在哪里? – georgerw

+0

对不起,我是编程新手,不确定是否完全理解。要在数据库中定义我的表,我的main.py应用程序文件中有类。那么这应该是“import main.py?”代替? – Reno

+0

将模型放在自己的文件中称为models.py是很常见的。在main.py中,你可以用'from .models import MyModel'来导入它们。通过这样做,您将避免在应用程序增长时出现的循环导入问题 – georgerw

回答

0

您使用Python代码文件来做到这一点。该文件为正在创建的实体导入或定义Model类,为每个要导入的类型定义一个加载器类,并在全局变量中声明可用的加载器类。例如,假设您在一个名为models.py的文件中定义了一个名为“FTSE”的Model类(它位于您的PYTHON PATH中,例如您将运行该工具的目录例如:C:\ Python27 )类似于以下内容:

models.py

from google.appengine.ext import db 

class FTSE(db.Model): 
    date = db.DateProperty() 
    close = db.FloatProperty() 
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] 

基本上它只是把你的模型定义放在批量加载程序中。这当然不是最好的办法,但它可以解决appcfg.py在运行批量上传时似乎存在的PYTHONPATH问题。

相关问题