django - 使用 SQLITE 为 Google App Engine 进行本地 Django 开发?

标签 django sqlite google-app-engine

我正在使用 Google App Engine 在 Django 中进行开发。对于生产,我计划使用 Google Cloud SQL,但对于本地开发,我想使用简单的 SQLITE。 Google 教程 ( https://developers.google.com/appengine/docs/python/cloud-sql/django ) 建议我运行开发服务器

dev_appserver.py mysite

而不是 Django 默认
manage.py runserver

但是,当我按照 Google 的建议运行开发服务器时,出现了两个奇怪的错误(为了清楚起见,我删除了其余的堆栈跟踪):
File "/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/lib/django1.5/django/db/backends/sqlite3/base.py", line 34, in <module>
raise ImproperlyConfigured("Error loading either pysqlite2 or sqlite3 modules (tried in that order): %s" % exc)ImproperlyConfigured: Error loading either pysqlite2 or sqlite3 modules (tried in that order): No module named _sqlite3


File "/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/lib/django-1.5/django/core/handlers/base.py", line 53, in load_middleware
raise exceptions.ImproperlyConfigured('Error importing middleware %s: "%s"' % (mw_module, e)) ImproperlyConfigured: Error importing middleware django.contrib.auth.middleware: "cannot import name utils"

最奇怪的是,当我只使用 manage.py runserver 时,站点运行良好。此外,当我直接在交互式 python 提示中测试 sqlite3 时,它也可以工作:
Python 2.7.5 (default, Aug 25 2013, 00:04:04) 
[GCC 4.2.1 Compatible Apple LLVM 5.0 (clang-500.0.68)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import sqlite3
>>> 

这里有人可以帮助我吗?我不知道接下来要做什么。提前致谢!

最佳答案

我偶然发现了同一块石头,直到我意识到 GAE 不允许你使用 SQLite,至少不是开箱即用的......

因此,他们的开发服务器也不允许这样做,以防止在部署时出现任何意外。

尽管可能有一种方法,因为 Google Appengine 文档有时会引用一些“SQlite Stub”,但我无法在他们的文档丛林中安全地导航,也找不到最近的、体面的、有效的示例。

因此,就目前而言,一种解决方案是:如果您需要关系数据库,请使用 mysql,但是一旦您在 GAE 上推出它,您就必须支付订阅费用。请注意,定价可能非常便宜。

以下是 settings.py 文件的示例声明:

if (os.getenv('SERVER_SOFTWARE', '').startswith('Google App Engine') or
    os.getenv('SETTINGS_MODE') == 'prod'):
    # Running on production App Engine, so use a Google Cloud SQL database.
    DATABASES = {
        'default': {
            'ENGINE': 'google.appengine.ext.django.backends.rdbms',
            'INSTANCE': '<project>-pts:ptsdb',
            'NAME': '<dbname>',
            'OPTIONS': {"init_command": "SET storage_engine=INNODB"},
        }
    }
else:
    # Running in development, so use a local MySQL database.
    DATABASES = {
        'default': {
            'ENGINE': 'django.db.backends.mysql',
            'NAME': '<dbname>',
            'USER': '<username>',
            'PASSWORD': '',
            'HOST': 'localhost',
            'OPTIONS': {"init_command": "SET storage_engine=INNODB"},
        }
    }

否则,您也可以免费使用他们的 NDB 数据库,但您将无法定义实体之间的“强”关系(外键)。

关于django - 使用 SQLITE 为 Google App Engine 进行本地 Django 开发?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21302612/

相关文章:

python - django rest 框架权限 'isAdminorReadonly'

python - 为 Django 表单编码 UTF-8

Python 在新实例中缓存以前的对象属性

node.js - 无法从Electron应用程序获取数据(部署后)

python - 寻找在 Sqlite3 中创建引用代码的更好方法

Django 统计今天登录的用户数

c# - Android 应用程序 SQLite 的更新如何进行

google-app-engine - 生成 GCP 兼容的 Cloudflare SSL 证书

java - 如何从 HttpServletResponse 获取 xml 字符串 - 调试时

java - 来自 App Engine 的管道提交