如何切换到新数据库

Jia*_*ing 1 django django-models

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

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

但只创建了与auth相关的表(如auth_user,auth_group...),没有为我的应用程序创建数据库表

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

Ume*_*res 9

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

python manage.py makemigrations app_name
Run Code Online (Sandbox Code Playgroud)

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

'new': {
    'ENGINE': 'django.db.backends.mysql',
    'NAME': 'databasename',
    'USER': 'databaseusername',
    'PASSWORD': 'databasepassword',
    'HOST': 'localhost',
    'PORT': '3306',
}
Run Code Online (Sandbox Code Playgroud)

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

python manage.py migrate --database=new
Run Code Online (Sandbox Code Playgroud)

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

python manage.py flush --database=new
Run Code Online (Sandbox Code Playgroud)

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

python manage.py dumpdata>data.json
Run Code Online (Sandbox Code Playgroud)

将此数据导入新数据库:

python manage.py loaddata data.json --database=new
Run Code Online (Sandbox Code Playgroud)

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

这个答案中提到的程序取自我的博客


Say*_*yse 6

  1. 删除了我的App下的迁移文件夹

这是您的错误,您删除了迁移 - 包括初始迁移.所以当你去的时候,makemigrations你还没有初步的迁移.

所以你需要运行makemigrations <app_name>至少进行初始迁移.

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