django-nonrel в google app engine: могут ли поля PrimaryKey иметь значение 0? - PullRequest
2 голосов
/ 14 сентября 2011

При попытке массовой загрузки некоторых устаревших данных из проекта django, который я конвертировал из MS-Access в Google App Engine (через django-nonrel), я думаю, что столкнулся с кирпичной стеной при попытке вставить данныес первичным ключом со значением 0 (ноль).Многие из моих данных имеют нулевые первичные ключи, а строки с нулевыми первичными ключами обрабатываются как особые и на них ссылаются многие внешние ключи (что очень затрудняет исправление всех ссылок на строки с.

Я получаюпри попытке вставить следующую ошибку:

File "/Users/myuser/my_app/django/core/management/commands/loaddata.py", line 174, in handle
    obj.save(using=using)
File "/Users/myuser/my_app/django/core/serializers/base.py", line 165, in save
    models.Model.save_base(self.object, using=using, raw=True)
File "/Users/myuser/my_app/django/db/models/base.py", line 573, in save_base
    result = manager._insert(values, return_id=update_pk, using=using)
File "/Users/myuser/my_app/django/db/models/manager.py", line 195, in _insert
    return insert_query(self.model, values, **kwargs)
File "/Users/myuser/my_app/django/db/models/query.py", line 1438, in insert_query
    return query.get_compiler(using=using).execute_sql(return_id)
File "/Users/myuser/my_app/dbindexer/compiler.py", line 38, in execute_sql
    return super(SQLInsertCompiler, self).execute_sql(return_id=return_id)
File "/Users/myuser/my_app/djangotoolbox/db/basecompiler.py", line 370, in execute_sql
    return self.insert(data, return_id=return_id)
File "/Users/myuser/my_app/djangoappengine/db/compiler.py", line 59, in _func
    return func(*args, **kwargs)
File "/Users/myuser/my_app/djangoappengine/db/compiler.py", line 470, in insert
    entity = Entity(self.query.get_meta().db_table, **kwds)
File "/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/google/appengine/api/datastore.py", line 784, in __init__
    datastore_types.ValidateInteger(id, 'id')
File "/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/google/appengine/api/datastore_types.py", line 195, in ValidateInteger
    raise exception('%s must not be 0 (zero)' % name)
DatabaseError: id must not be 0 (zero)

Из этого дампа видно, что ошибка возникает в самом API-интерфейсе Python GoogleAppEngine, а не в коде django-nonrel или djangoappengine.Вопрос в том, можно ли установить нулевые значения в целочисленных полях первичного ключа в Google App Engine?

Спасибо!

Ответы [ 2 ]

0 голосов
/ 15 сентября 2011

Ошибка кажется довольно очевидной: нет, вы не можете установить первичный (целочисленный) ключ в 0.

0 голосов
/ 15 сентября 2011

У меня была похожая проблема при переходе с mysql на google app engine. Решением может быть установка целочисленного значения на отрицательное, если вы не можете использовать 0 и положительные значения зарезервированы. Я установил мои первичные ключи с импорта на минус и мог работать оттуда, обрабатывая импорт и обычные данные различными способами.

...