django项目怎么配置连接多个数据库-亚博电竞手机版
开发技术
2022年05月19日 10:35
0
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项目怎么配置连接多个数据库”这篇文章的所有内容,感谢各位的阅读!相信大家阅读完这篇文章都有很大的收获,小编每天都会为大家更新不同的知识,如果还想学习更多的知识,请关注恰卡编程网行业资讯频道。
展开全文