3

Python2.7上のGoogleAppEngine1.7.4上のDjango1.4でsqlite3サポートを動作させようとしています。

「GoogleCloudSQL」データベースバックエンドをいじってみましたが、すべてうまくいきました(syncdb、挿入/更新/削除など)。

しかし、次にsqliteを有効にしました(ローカルホストではGoogle Cloud SQLが遅いため):

import os
if (os.getenv('SERVER_SOFTWARE', '').startswith('Google App Engine') or
    os.getenv('SETTINGS_MODE') == 'pushtolive'):
    # Running on production App Engine, so use a Google Cloud SQL database.
    DATABASES = {
        'default': {
            'ENGINE': 'google.appengine.ext.django.backends.rdbms',
            'INSTANCE': 'xyz:xyz',
            'NAME': 'my_database',
        }
    }
else:
    # Running in development, so use a local SQLite database
    DATABASES = {
        'default': {
            'ENGINE': 'django.db.backends.sqlite3',
            'NAME': '/tmp/mysite.db',
        }
    }

そして、URL(127.0.0.1:8080など)を開くと、この巨大なスタックトレースに遭遇します。スタックトレースを削除して、読みやすくしました。

ERROR    2012-12-29 09:07:06,223 base.py:215] Internal Server Error: /favicon.ico
Traceback (most recent call last):
  File "/Users/philipp/python/mysite/urls.py", line 4, in <module>
    from django.contrib import admin
  File ".../google_appengine/lib/django_1_4/django/contrib/admin/__init__.py", line 3, in <module>
    from django.contrib.admin.helpers import ACTION_CHECKBOX_NAME
  File ".../google_appengine/lib/django_1_4/django/contrib/admin/helpers.py", line 2, in <module>
    from django.contrib.admin.util import (flatten_fieldsets, lookup_field,
  File ".../google_appengine/lib/django_1_4/django/contrib/admin/util.py", line 1, in <module>
    from django.db import models
  File ".../google_appengine/lib/django_1_4/django/db/__init__.py", line 40, in <module>
    backend = load_backend(connection.settings_dict['ENGINE'])
  File ".../google_appengine/lib/django_1_4/django/db/__init__.py", line 34, in __getattr__
    return getattr(connections[DEFAULT_DB_ALIAS], item)
  File ".../google_appengine/lib/django_1_4/django/db/utils.py", line 92, in __getitem__
    backend = load_backend(db['ENGINE'])
  File ".../google_appengine/lib/django_1_4/django/db/utils.py", line 24, in load_backend
    return import_module('.base', backend_name)
  File ".../google_appengine/lib/django_1_4/django/utils/importlib.py", line 35, in import_module
    __import__(name)
  File ".../google_appengine/lib/django_1_4/django/db/backends/sqlite3/base.py", line 14, in <module>
    from django.db import utils
ImportError: cannot import name utils

スタックトレースから、実行がdjango.db.utilsモジュールに実行され、次にに実行され、次に再びdjango.db.backends.sqlite3.baseジャンプしようとしますが、奇妙なことに失敗することがわかりました。django.db.utils

これが機能するため、問題はGAE環境にあるようです。

python mysite/manage.py syncdb

そしてこれも:

python mysite/manage.py shell
>>> from django.contrib.auth.models import User
>>> u = User(username="hans")
>>> u.save()
>>> User.objects.all()
[<User: hans>]

私がこれまでに試したこと:

  • Django 1.3/1.4から/に切り替えました
  • GAEをアンインストールし、再度インストールしました
  • 私はグーグルが「django.dbimportutilsからのImportError」について明らかにしたすべての解決策を試しました
  • この同様の質問があります。質問のステートメントを実行してみましたが、問題は発生しません。

私はOSX10.8.2を使用しています私のPYTHONPATHは:/usr/local/google_appengine:/usr/local/google_appengine/lib/django_1_4

4

3 に答える 3

4

devでsqliteを使用し、本番環境でmysql(Cloud SQLで使用される)を使用することはお勧めできません。この設定は誰にもお勧めしません。

次に、オプションがあります。これは、Googleデータストア--use_sqliteを使用するときに開発をスピードアップするために使用されます。CloudSQLには同様のオプションはありません。

于 2012-12-31T09:56:06.420 に答える
4

_sqlite3これは、に追加してsqlite3モジュールをホワイトリストに登録することで解決でき_WHITE_LIST_C_MODULESます/usr/local/google_appengine/google/appengine/tools/dev_appserver_import_hook.py

からファイルにアクセスするには、AppEngineランチャーで[MakeSymlinks...]を選択する必要があることに注意してください/usr/local

于 2013-02-13T13:05:31.467 に答える
1

SDKの最新バージョンでは、サンドボックスでsqlite3モジュールを有効にするには、次を追加します。

'sqlite3' in name.lower()

google-app-engine / google / appengine / tools / devappserver2 / python / sandbox.pyの_should_keep_module関数(195行目あたり)

于 2013-04-17T11:30:15.703 に答える