在Django中切换MySQL和SQLite3

时间:2015-07-14 19:00:24

标签: python mysql django sqlite

我正在使用Django的Mercurial项目。在代码中(settings.py下)有:

SESSION_ENGINE = 'django.contrib.sessions.backends.db'
DATABASES = {
    'default': {
    'ENGINE': 'django.db.backends.mysql',
    'NAME': 'foo',
    'USER': 'bar',
    'PASSWORD': 'baz',
    'HOST': '',
    'PORT': '',
    'OPTIONS': { 'init_command': 'SET storage_engine=INNODB;' },
    }
}

#Use a local mysql db for development
if IN_DEVELOPMENT:
    DATABASES["default"] = {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'foo',
        'USER': 'bar',
        'PASSWORD': 'baz',
        'HOST': '',
        'OPTIONS': { 'init_command': 'SET storage_engine=INNODB;' },
        }

有人告诉我,我可以简单地用mysql替换if IN_DEVELOPMENT块中的sqlite3(因为我没有mySQL,而且我安装它的尝试都没有成功)。当我加载任何页面时,这会导致错误,我可以通过注释掉第二个OPTIONS行来解决这个问题。现在我可以加载仅依赖于静态数据的页面。但是当我尝试访问一个表时,我得到errors like this(虽然“没有这样的表”的名称不同)。

我是否必须从项目中重新创建数据库表?是否有init_command(如果它们尚不存在,我认为会创建表格?)我可以使用sqlite3吗?除了下载MySQL-python之外,我还有其他任何行动吗(甚至可以提供帮助吗?)

2 个答案:

答案 0 :(得分:2)

当然,您需要创建表,因为它们不存在于新数据库中。您可以采用与原始方式完全相同的方式执行此操作:运行manage.py migrate

答案 1 :(得分:0)

我的lodadata会话有问题。

https://coderwall.com/p/mvsoyg/django-dumpdata-and-loaddata

这给了我解决方案。

" 要解决此问题,请确保通过排除contenttypes和auth.permissions表来备份数据库 ./manage.py dumpdata --exclude auth.permission --exclude contenttypes> db.json " 它对我有用。