解释:先在models.py写入模型,根据之前的迁移命令即可成功增加
正确删除方式:
误导删除方式:
解释:网上有好多文章都是这种删除方式,其实是错误的,只适用于不小心手动把表删除的情况(这种方法处理起来比较麻烦)
命令更改:生成迁移脚本python manage.py migrate --database=db #除了default,别的都需要自己设置database
,生成脚本命令无需变动
解释:即不同app使用不同的数据库
setting.py
DATABASE_ROUTERS = ['testDjango.dbUrls.DatabaseAppsRouter'] #对应一会单独创建的文件
# 设置app对应的数据库
DATABASE_APPS_MAPPING = {
'testWeb':"default",
'testCBV':"db"
}
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql',
'NAME': 'gao',
'USER': 'postgres',
'PASSWORD': '9865',
'HOST': '192.168.1.15', )
'PORT': '5432',
},
'db': {
'ENGINE': 'django.db.backends.postgresql',
'NAME': 'gh',
'USER': 'postgres',
'PASSWORD': '9865',
'HOST': '192.168.1.15',
'PORT': '5432',
}
}
testDjango/dbUrls.py
解释:放在主目录下(存放setting.py同目录),主要存放更改后的读取、写入、更改和迁移流程(固定的直接复制即可)
from django.conf import settings
DATABASE_MAPPING = settings.DATABASE_APPS_MAPPING # 在setting中定义的路由表
class DatabaseAppsRouter(object):
def db_for_read(self, model, **hints):
if model._meta.app_label in DATABASE_MAPPING:
return DATABASE_MAPPING[model._meta.app_label]
return None
def db_for_write(self, model, **hints):
if model._meta.app_label in DATABASE_MAPPING:
return DATABASE_MAPPING[model._meta.app_label]
return None
def allow_relation(self, obj1, obj2, **hints):
db_obj1 = DATABASE_MAPPING.get(obj1._meta.app_label)
db_obj2 = DATABASE_MAPPING.get(obj2._meta.app_label)
if db_obj1 and db_obj2:
if db_obj1 == db_obj2:
return True
else:
return False
return None
def allow_syncdb(self, db, model):
if db in DATABASE_MAPPING.values():
return DATABASE_MAPPING.get(model._meta.app_label) == db
elif model._meta.app_label in DATABASE_MAPPING:
return False
return None
def allow_migrate(self, db, app_label, model_name=None, **hints):
if db in DATABASE_MAPPING.values():
return DATABASE_MAPPING.get(app_label) == db
elif app_label in DATABASE_MAPPING:
return False
return None
解释:这个其实可以使用django自带的功能,只不过自带内容bug很多,建议使用navicat这类的软件
解释:选择导出向导,建议使用csv格式(这种格式导入的时候全部默认就能成功导入),之后可以全选下一步也能成功导入
解释:进入导入向导,选择之前导出的格式,全选下一步也能成功导入