- 在旧项目运行指令导出项目:
python manage.py dumpdata --natural-foreign --natural-primary -e contenttypes -e auth.Permission --indent 2 > dump.json
如果导出的项目报错:Changing django default pk with AutoField to BigAutoField
可以在settings文件加入: DEFAULT_AUTO_FIELD = 'django.db.models.BigAutoField'
如果遇见报错:Django loaddata UNIQUE constraint failed
可以将json文件的‘pk’改为‘id’;如果依然不行,把json文件的user相关的如accounts数据,与accounts相关的数据都删除,即可导入所需data如product数据。
- 在新Django项目的settings 文件将原来的数据库设置注释,改成链接新的aws上的数据库或自己指定的数据库:
# Database
# https://docs.djangoproject.com/en/2.2/ref/settings/#databases
# if 'RDS_DB_NAME' in os.environ:
# DATABASES = {
# 'default': {
# 'ENGINE': 'django.db.backends.mysql',
# 'NAME': os.environ['RDS_DB_NAME'],
# 'USER': os.environ['RDS_USERNAME'],
# 'PASSWORD': os.environ['RDS_PASSWORD'],
# 'HOST': os.environ['RDS_HOSTNAME'],
# 'PORT': os.environ['RDS_PORT'],
# }
# }
# else:
# DATABASES = {
# 'default': {
# 'ENGINE': 'django.db.backends.sqlite3',
# 'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
# }
# }
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'ebdb',
'USER': 'dbusername',
'PASSWORD': '87366',
'HOST': 'dkosux7a44ddfbrn.us-west-2.rds.amazonaws.com',
'PORT': 3306,
},
}
然后运行命令:
python manage.py loaddata dump.json
3. 将新Django项目的settings 文件改成原来的数据库设置:
if 'RDS_DB_NAME' in os.environ:
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': os.environ['RDS_DB_NAME'],
'USER': os.environ['RDS_USERNAME'],
'PASSWORD': os.environ['RDS_PASSWORD'],
'HOST': os.environ['RDS_HOSTNAME'],
'PORT': os.environ['RDS_PORT'],
}
}
else:
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
}
}
完毕!