如何切换到新数据库

时间:2016-06-28 04:39:08

标签: django django-models

我想将django项目部署到生产环境中,并将其与新的空数据库关联,我按如下方式执行:

  1. 创建一个新的空数据库
  2. 更新了settings.py并将数据库名称指向新的
  3. 删除了我的应用
  4. 下的迁移文件夹
  5. 运行python manage.py runserver并且没有返回错误
  6. 运行python manage.py makemigrations和python manage.py migrate
  7. 但只创建了与auth相关的表(如auth_userauth_group ...),没有为我的应用程序创建数据库表

    如何针对这种情况迁移到我的项目的新数据库?

4 个答案:

答案 0 :(得分:5)

  
      
  1. 删除了我的应用
  2. 下的迁移文件夹   

这是您的错误,您删除了迁移 - 包括初始迁移。因此,当您转到makemigrations时,您尚未获得初始迁移。

因此,您需要运行makemigrations <app_name>以至少获得初始迁移。

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

答案 1 :(得分:5)

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

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',
}

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

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

答案 2 :(得分:0)

只需检查select distinct t1.* from user_profiles t1 left join user_friends t2 on(t1.id = t2.user_id) where t1.id = 1997 and (user_privacy='false' or t2.friends_id = 2001) 命令的输出,如果显示未检测到任何更改,则需要检查是否已在python manage.py makemigrations INSTALLED_APPS = []文件中添加该应用因为你已经删除了迁移文件夹而成为问题。因为如果有任何数据库连接错误,它会在执行makemigrations时向您显示。

答案 3 :(得分:0)

如果您的数据库有新名称,即不是&#34;默认&#34;,则需要将其指定为b = df.B.str.extract(r'\[(.*)\]', expand=False).str.split(',', expand=True).fillna(np.nan) df['D'] = pd.DataFrame(b.apply(lambda x: tuple(x.values))).applymap(list)

migrate