django 多数据库联用

本文详细介绍了在Django项目中如何配置和使用多个数据库,包括修改settings配置,设置数据库路由规则,配置APP对应的数据库,创建数据库路由规则,创建数据表,解决生成数据表过程中的错误,并提供了数据导出和导入的简要说明。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在django项目中, 一个工程中存在多个APP应用很常见. 有时候希望不同的APP连接不同的数据库,这个时候需要建立多个数据库连接。

1. 修改项目的 settings 配置 
在 settings.py 中配置需要连接的多个数据库连接串

# Database
# https://docs.djangoproject.com/en/1.11/ref/settings/#databases

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
    },
    'db1': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'db1',
        'USER': 'root',
        'PASSWORD': 'your_mysql_password',
        'HOST': '127.0.0.1',
        'PORT': '3306'
    },
    'db2': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'db2',
        'USER': 'root',
        'PASSWORD': 'your_mysql_password',
        'HOST': 'localhost',
        # 默认'PORT': '3306'
    }
}

your_mysql_password: 你的mysq密码;

假设现在我们用到3个数据库,一个default默认库,一个 db1 和 db2。

2. 设置数据库的路由规则方法 
在 settings.py 中配置 DATABASE_ROUTERS

# use multi-database in django
# add by ZhengShilin
DATABASE_ROUTERS = ['your_project_name.database_router.DatabaseAppsRouter']

your_project_name: 建立的django项目名称(project_name) ;
database_router: 定义路由规则

Django 中进行联表查询,可以使用 ORM(对象关系映射) 的方式来操作数据库。ORM 是 Django 框架中的一种数据访问技术,它将数据库中的表与 Python 中的类映射起来,使得我们可以使用 Python 代码来操作数据库。 以下是一个简单的联表查询示例,假设我们有两个模型:一个是用户模型 User,一个是文章模型 Article,每个用户可以发布多篇文章。 ```python from django.db import models class User(models.Model): name = models.CharField(max_length=50) email = models.EmailField() class Article(models.Model): title = models.CharField(max_length=100) content = models.TextField() author = models.ForeignKey(User, on_delete=models.CASCADE) ``` 从上面的代码可以看出,Article 模型中有一个外键字段 author,它关联到 User 模型中的一个用户。 现在我们想要查询所有文章及其作者的信息,可以使用以下代码: ```python articles = Article.objects.select_related('author').all() for article in articles: print(article.title, article.content, article.author.name, article.author.email) ``` 这里使用了 select_related 方法来进行预加载,避免了多次查询数据库的问题。在遍历文章时,我们可以通过 article.author 访问到对应的作者信息。 除了 select_related 方法外,Django 还提供了其他查询方式,如 prefetch_related、values、annotate 等,可以根据实际情况选择合适的方法来进行联表查询。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值