Я потратил как минимум два часа, пытаясь заставить это работать.Я видел довольно много разных вопросов по SO и в группах Google, но ни один из ответов, похоже, не работает для меня.
Вопрос: Как выполнить массовую загрузку данных, как вФайл CSV ниже в хранилище данных, чтобы создать объекты, которые имеют имя_ключа, определенное в файле CSV (тот же результат, что и при использовании функции добавления ниже).
Это моя модель:
class RegisteredDomain(db.Model):
"""
Domain object class. It has no fields because it's existence is
proof that it has been registered. Indivdual registered domains
can be found using keys.
"""
pass
Вот как я обычно добавляю / удаляю домены и т.д .:
def add(domains):
"""
Add domains. This functions accepts a single domain string or a
list of domain strings and adds them to the database. The domain(s)
must be valid unicode strings (a ValueError is thrown if the domain
strings are not valid.
"""
if not isinstance(domains, list):
domains = [domains]
cleaned_domains = []
for domain in domains:
clean_domain_ = clean_domain(domain)
is_valid_domain(clean_domain_)
cleaned_domains.append(clean_domain_)
domains = cleaned_domains
db.put([RegisteredDomain(key_name=make_key(domain)) for domain in domains])
def get(domains):
"""
Get domains. This function accepts a single domain string or a list
of domain strings and queries the database for them. It returns a
dictionary containing the domain name and RegisteredDomain object or
None if the entity was not found.
"""
if not isinstance(domains, list):
domains = [domains]
entities = db.get([Key.from_path('RegisteredDomain', make_key(domain)) for domain in domains])
return dict(zip(domains, entities))
Примечание: в приведенном выше коде make_key просто делаетдомен в нижнем регистре и добавляет 'd'.
Так что это так.Теперь я схожу с ума, пытаясь загрузить некоторые объекты RegisteredDomain из файла CSV.Вот файл CSV (обратите внимание, что первый символ 'd' существует из-за того факта, что имя ключа может не начинаться с цифры):
key
dgoogle.com
dgoogle11.com
dfacebook.com
dcool.com
duuuuuuu.com
dsdsdsds.com
dffffooo.com
dgmail.com
Я не смог автоматически сгенерироватьФайл yaml для массового загрузчика, потому что ядро приложения все еще не обновляет мою статистику хранилища данных (1 день плюс несколько часов).Итак, это (и многие подобные перестановки) то, что я придумал (в основном изменяя бит import_transform):
python_preamble:
- import: google.appengine.ext.bulkload.transform
- import: google.appengine.api.datastore
- import: google.appengine.ext.db
- import: utils
- import: bulk_helper
transformers:
- kind: RegisteredDomain
connector: csv
connector_options:
encoding: utf-8
property_map:
- property: __key__
external_name: key
export_transform: bulk_helper.key_to_reverse_str
import_template: transform.create_foreign_key('RegisteredDomain')
Теперь по какой-то причине, когда я пытаюсь загрузить его, говорит, что все идет хорошо, и х сущностейбыли перенесены и т.д., но ничего не обновляется в хранилище данных (как я вижу из консоли администратора).Вот как я загружаю:
appcfg.py upload_data --application=domain-sandwich --kind=RegisteredDomain --config_file=bulk.yaml --url=http://domain-sandwich.appspot.com/remote_api --filename=data.csv
И, наконец, вот так выглядит мой просмотрщик хранилища данных:
Примечание: я делаю это как на dev-сервере, так и на appengine(что бы ни работало ...).
Спасибо за любую помощь!