在django项目中, 一个工程中存在多个APP应用很常见. 有时候希望不同的APP连接不同的数据库,这个时候需要建立多个数据库连接。
1. 修改项目的 settings 配置
在 settings.py 中配置需要连接的多个数据库连接串
2. 设置数据库的路由规则方法
在settings.py中配置DATABASE_ROUTERS
1DATABASE_ROUTERS = ['Prject.database_router.DatabaseAppsRouter']
Project: 建立的django项目名称(project_name)
database_router: 定义路由规则database_router.py文件名称, 这个文件名可以自己定义
DatabaseAppsRouter: 路由规则的类名称,这个类是在database_router.py文件中定义
3. 设置APP对应的数据库路由表
每个APP要连接哪个数据库,需要在做匹配设置,在settings.py文件中做如下配置:
以上的report, regs是项目中的 APP名,分别指定到 ora1, default的数据库。
为了使django自己的表也创建到你自己定义的数据库中,你可以指定 : admin, auth, contenttypes, sessions 到设定的数据库中,如果不指定则会自动创建到默认(default)的数据库中.
4. 创建数据库路由规则
在项目工程根路径下(与 settings.py 文件一级)创建database_router.py文件:
5.原生sql 的使用:
6. Models创建样例
在各自的 APP 中创建数据表的models时,必须要指定表的 app_label 名字,如果不指定则会创建到default中配置的数据库名下,
如下:
在app01下创建models
在app02下创建models
7. 生成数据表
在使用django的 migrate 创建生成表的时候,需要加上 –database 参数,如果不加则将 未 指定 app_label 的 APP的models中的表创建到default指定的数据库中,如:
将app01下models中的表创建到db01的数据库”db_01”中
./ manage.py migrate--database=db01
将app02下models中的表创建到db02的数据库”db_02”中
./ manage.py migrate--database=db02
将app03下models中的表创建到default的数据库”sqlite3”中
./ manage.py migrate
以上创建完成后,其它所有的创建、查询、删除等操作就和普通一样操作就可以了,无需再使用类似
models.User.objects.using(dbname).all()
这样的方式来操作
网友评论