Bulkloader не импортирует ndb.model

Я все еще новичок в Python и GAE. У меня есть приложение на локальном сервере, которое работает нормально. Я могу добавить объект в свое хранилище данных, я могу просматривать свой веб-сайт и т. д.: все в порядке.

Теперь я пытаюсь использовать массовый загрузчик для добавления объектов в мое хранилище данных. Я следовал руководству по адресу https://developers.google.com/appengine/docs/python/tools/uploadingdata. Мой загрузчик ниже:

from google.appengine.ext import ndb
from google.appengine.tools import bulkloader
import my_model

class ArticleLoader(bulkloader.Loader):
  def __init__(self):
    bulkloader.Loader.__init__(self, 'Article',
                               [('title', str),
                                ('author', str)
                                ])

loaders = [ArticleLoader]

Я получаю сообщение об ошибке:

No module named my_model

У кого-нибудь есть исправление для этого?

Примечание. Я использую только один каталог. Итак, мой загрузчик находится в том же месте, что и другой файл, который импортирует модуль my_model.


person kasavbere    schedule 08.12.2012    source источник
comment
У меня нет файла bulkloader.yaml. В учебнике упоминается, что он не может быть сгенерирован автоматически для локального хоста. Если мне это нужно, есть ли у кого-нибудь пример того, как должен выглядеть файл? Я передаю файл csv.   -  person kasavbere    schedule 09.12.2012


Ответы (2)


Это также может произойти, если ваш PYTHONPATH настроен неправильно. Если вы работаете в Linux, попробуйте запустить это перед запуском Bulkloader:

export PYTHONPATH=$PYTHONPATH:.

Это добавит ваш текущий каталог к ​​вашему PYTHONPATH и сделает ваш модуль my_model видимым. Поскольку у меня ужасная память, и я всегда забываю это сделать, в итоге я использовал простой сценарий оболочки, который включает это в начале, а затем саму команду массовой загрузки.

Если вы работаете в Windows, вы сможете изменить свой путь, используя sys.path.append. Не проверял это, но вы можете попробовать добавить это в свой скрипт (обратите внимание, что это должно работать и в Linux):

import sys
# ...
sys.path.append('.')
person RocketDonkey    schedule 09.12.2012
comment
Прохладный! Голосуйте за! Теперь я получаю новую ошибку в той же строке: raise KindError('No implementation for kind \'%s\'' % kind) google.appengine.ext.db.KindError: No implementation for kind 'Article' - person kasavbere; 09.12.2012
comment
Итак, теперь он видит модуль, но не класс внутри модуля, который на самом деле является единственным классом внутри модуля. Любой другой файл прекрасно видит класс, кроме этого загрузчика. - person kasavbere; 09.12.2012
comment
Мне нужен bulkloader.yaml? Поскольку я не могу создать его автоматически, у вас есть пример, который я могу использовать? Я передаю файл csv. - person kasavbere; 09.12.2012
comment
@kasavbere А, ты используешь ndb, сначала не заметил. На самом деле вы можете увидеть причину ошибки в вашей трассировке - вызывается db API, а не ndb. Я помню, что кто-то задавал аналогичный вопрос - я вставлю ссылку сюда, если смогу ее найти (я думаю, что на самом деле это отсутствующая функция). - person RocketDonkey; 09.12.2012
comment
@kasavbere Вот активный запрос функции (code.google .com/p/appengine-ndb-experiment/issues/detail?id=224). Это пришло из stackoverflow.com/questions/13571466/, на который ответил кто-то с гораздо большим доверием, чем я :) Извините за неудовлетворительный ответ. - person RocketDonkey; 09.12.2012
comment
Большое спасибо. По крайней мере, теперь я знаю, почему. Поскольку Google настаивает на ndb. Им действительно следует подумать о добавлении способа загрузки CSV-файлов. - person kasavbere; 09.12.2012
comment
@kasavbere Конечно. Я уверен, что в какой-то момент это будет реализовано — загрузка из CSV с помощью db чрезвычайно полезна. Там могут быть некоторые обходные пути, хотя я не знаю, одобрены ли они Google. В любом случае удачи во всем. - person RocketDonkey; 09.12.2012

Ваш код должен находиться в файле с именем my_model.py. Вы получаете эту ошибку, потому что нет модуля с именем my_module. Возможно, стоит прочитать модуль Python и пакет документов.

person Robert Kluin    schedule 09.12.2012
comment
Я не люблю голосовать против людей, которые достаточно любезны, чтобы попытаться помочь. Но вы действительно должны прочитать вопрос лучше в следующий раз. - person kasavbere; 09.12.2012