【问题标题】:how to switch to a new database如何切换到新数据库
【发布时间】:2016-10-30 05:55:44
【问题描述】:

我想将我的 django 项目部署到生产环境,并将它与一个新的空数据库关联,我做了如下:

  1. 新建一个空数据库
  2. 更新了 settings.py 并将数据库名称指向了新的名称
  3. 删除了我的应用下的迁移文件夹
  4. 运行 python manage.py runserver 没有返回错误
  5. 运行 python manage.py makemigrations 和 python manage.py migrate

但只创建了与身份验证相关的表(如 auth_userauth_group ...),没有为我的应用创建数据库表

对于这种情况,我应该如何为我的项目迁移到新数据库?

【问题讨论】:

  • 你能告诉我输出:from django.conf import settings;打印 settings.DATABASES 和 settings.INSTALLED_APPS

标签: django django-models


【解决方案1】:
  1. 删除了我的应用下的迁移文件夹

这是您的错误,您删除了迁移 - 包括初始迁移。因此,当您转到 makemigrations 时,您还没有可用的初始迁移。

所以您需要运行makemigrations <app_name> 才能至少获得初始迁移。

如果您要再次执行此操作,请不要删除迁移,只需更改数据库设置然后迁移即可。

【讨论】:

  • 除了缺少迁移之外,这种方法是否可行?我正在尝试使用 SQLite 开发一个简单的应用程序,然后在生产时将其切换到 MySQL。
  • @MadPhysicist - 这是预期的做法 - 如果您需要进一步的帮助,请考虑提出一个新问题,其中包含您尝试/研究过的内容
  • @Sayse 我还没有尝试过。我想在开始之前确保我没有走失败的路线:)
【解决方案2】:

首先,您不应该删除迁移。现在,再次进行您已删除的所有迁移。

python manage.py makemigrations app_name

对您已删除迁移的所有应用执行此操作。 现在,将新数据库添加到 settings.py。不要删除旧的。例如,如果我要添加 MySQL 数据库,我会在 settings.py 中的 DATABASES 字典中添加以下内容:

'new': {
    'ENGINE': 'django.db.backends.mysql',
    'NAME': 'databasename',
    'USER': 'databaseusername',
    'PASSWORD': 'databasepassword',
    'HOST': 'localhost',
    'PORT': '3306',
}

我已将数据库命名为“新”。现在我们有两个数据库“默认”和“新”。现在您必须通过在新数据库上运行迁移来在新数据库中创建表:

python manage.py migrate --database=new

如果您想将数据传输到新数据库,可以执行这些附加步骤。首先,清除新数据库:

python manage.py flush --database=new

现在将旧数据库中的数据导出到 json 文件中:

python manage.py dumpdata>data.json

将此数据导入新数据库:

python manage.py loaddata data.json --database=new

现在您可以删除“默认”数据库并将“新”数据库重命名为“默认”。

这个答案中提到的过程取自my blog

【讨论】:

    【解决方案3】:

    只需检查python manage.py makemigrations 命令的输出,如果显示未检测到更改,那么您需要检查您是否在INSTALLED_APPS = [] 文件中的INSTALLED_APPS = [] 中添加了该应用程序,否则可能是问题,因为您有删除了迁移文件夹。因为如果有任何数据库连接错误,它会在执行 makemigrations 时向您显示。

    【讨论】:

      【解决方案4】:

      如果您的数据库有一个新名称,即不是“默认”,您需要将其指定为migrate

      python manage.py migrate --database <newdb>
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-08-28
        • 1970-01-01
        • 2011-04-26
        • 1970-01-01
        相关资源
        最近更新 更多