django项目怎么配置连接多个数据库-mile米乐体育

django项目怎么配置连接多个数据库

今天小编给大家分享一下django项目怎么配置连接多个数据库的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。

一个app对应一个默认数据库,若连接其他数据库用".using()"

author.objects.using('db02').all()

1、在项目settings中增加数据库配置

#settings.pydatabases={'default':{'engine':'django.db.backends.oracle','name':'orcl19c','user':"username01",'password':"password01",'host':"110.10.1.11",'port':1511,},'db_2':{'engine':'django.db.backends.oracle','name':'orcl19c','user':"username02",'password':"password02",'host':"120.20.2.22",'port':1512,}}#以下myproject改成项目名,默认default不用修改database_routers=['myproject.database_router.databaseappsrouter']database_apps_mapping={'app01':'default','app02':'db_2',}

2、在项目根目录下myproject/myproject 新建数据库路由文件database_router.py

直接复制以下代码,无需修改

fromdjango.confimportsettingsdatabase_mapping=settings.database_apps_mappingclassdatabaseappsrouter(object):"""aroutertocontrolalldatabaseoperationsonmodelsfordifferentdatabases.incaseanappisnotsetinsettings.database_apps_mapping,therouterwillfallbacktothe`default`database.settingsexample:database_apps_mapping={'app1':'db1','app2':'db2'}"""defdb_for_read(self,model,**hints):""""pointallreadoperationstothespecificdatabase."""ifmodel._meta.app_labelindatabase_mapping:returndatabase_mapping[model._meta.app_label]returnnonedefdb_for_write(self,model,**hints):"""pointallwriteoperationstothespecificdatabase."""ifmodel._meta.app_labelindatabase_mapping:returndatabase_mapping[model._meta.app_label]returnnonedefallow_relation(self,obj1,obj2,**hints):"""allowanyrelationbetweenappsthatusethesamedatabase."""db_obj1=database_mapping.get(obj1._meta.app_label)db_obj2=database_mapping.get(obj2._meta.app_label)ifdb_obj1anddb_obj2:ifdb_obj1==db_obj2:returntrueelse:returnfalsereturnnonedefallow_syncdb(self,db,model):"""makesurethatappsonlyappearintherelateddatabase."""ifdbindatabase_mapping.values():returndatabase_mapping.get(model._meta.app_label)==dbelifmodel._meta.app_labelindatabase_mapping:returnfalsereturnnonedefallow_migrate(self,db,app_label,model=none,**hints):"""makesuretheauthapponlyappearsinthe'auth_db'database."""ifdbindatabase_mapping.values():returndatabase_mapping.get(app_label)==dbelifapp_labelindatabase_mapping:returnfalsereturnnone

3、使用inspectdb反向生成各app的model类之后,配置model类对应要链接的数据库

反向生成models.py 命令:

pythonmanage.pyinspectdb--databasedb1tablename1>app01/models.pypythonmanage.pyinspectdb--databasedb2tablename2>app02/models.py
#编辑app01下的models.py:classnames(models.model):#该model使用default数据库id=models.charfield(primary_key=true,max_length=100,blank=true,null=true)name=models.charfield(max_length=32,primary_key=true,unique=true)classmeta:#app_label='app01'#由于该model连接default数据库,所以在此无需指定db_table='names'#编辑app02下的models.py:classclassnum(models.model):#该model使用default数据库id=models.charfield(primary_key=true,max_length=100,blank=true,null=true)classnum=models.charfield(max_length=32,primary_key=true,unique=true)classmeta:app_label='app02'db_table='classnum'

4、同步数据库

#同步default节点数据库,只运行不带--database参数的命令,不对其他数据库进行同步pythonmanage.pymakemigrationspythonmanage.pymigrate#同步db02节点数据库:pythonmanage.pymakemigrationspythonmanage.pymigrate--database=db02

5、若要连接配置外的数据库

author.objects.using('other').all()my_object.save(using='legacy_users')my_object.delete(using='legacy_users')

移动对象到另一个数据库时会发生主键冲突,可以使用obj.pk方法清除主键再保存对象

>>>p=person(name='fred')>>>p.save(using='first')>>>p.pk=none#cleartheprimarykey.>>>p.save(using='second')#writea

以上就是“django项目怎么配置连接多个数据库”这篇文章的所有内容,感谢各位的阅读!相信大家阅读完这篇文章都有很大的收获,小编每天都会为大家更新不同的知识,如果还想学习更多的知识,请关注恰卡编程网行业资讯频道。

展开全文
内容来源于互联网和用户投稿,文章中一旦含有米乐app官网登录的联系方式务必识别真假,本站仅做信息展示不承担任何相关责任,如有侵权或涉及法律问题请联系米乐app官网登录删除

最新文章

网站地图