You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

AI赋能股票项目:如何在Django中配置MSSQL与MongoDB双数据库?

Django多数据库配置(MSSQL + MongoDB)

1. 先装依赖包

要连接MSSQL和MongoDB,得先装对应的驱动和Django适配库:

  • 装MSSQL相关:pip install pyodbc django-mssql-backend
  • 装MongoDB相关:pip install djongo

2. 配置settings.py里的数据库连接

在项目的settings.py中找到DATABASES配置项,添加两个数据库的连接信息:一个用来存客户数据(MSSQL),一个存股票行情(MongoDB)。示例代码如下:

DATABASES = {
    # MSSQL数据库,存客户数据
    'default': {
        'ENGINE': 'sql_server.pyodbc',
        'NAME': '你的客户数据库名',
        'USER': '数据库用户名',
        'PASSWORD': '数据库密码',
        'HOST': 'localhost',  # 或者你的MSSQL服务器地址
        'PORT': '1433',
        'OPTIONS': {
            'driver': 'ODBC Driver 17 for SQL Server',  # 确保驱动版本正确
        },
    },
    # MongoDB数据库,存股票行情数据
    'mongodb_db': {
        'ENGINE': 'djongo',
        'NAME': '你的股票行情数据库名',
        'CLIENT': {
            'host': 'localhost',  # 或者你的MongoDB服务器地址
            'port': 27017,
            'username': 'MongoDB用户名',
            'password': 'MongoDB密码',
            'authSource': 'admin',
            'authMechanism': 'SCRAM-SHA-1',
        }
    }
}

3. 设置数据库路由规则

Django需要知道哪些模型用哪个数据库,所以要写路由类。在对应的app里创建routers.py文件,分别给客户模块和股票数据模块写路由:

客户数据(MSSQL)路由

class MSSQLRouter:
    def db_for_read(self, model, **hints):
        # 属于customers app的模型,读操作走MSSQL
        if model._meta.app_label == 'customers':
            return 'default'
        return None

    def db_for_write(self, model, **hints):
        # 属于customers app的模型,写操作走MSSQL
        if model._meta.app_label == 'customers':
            return 'default'
        return None

    def allow_relation(self, obj1, obj2, **hints):
        # 允许同属customers app的模型之间建立关联
        if obj1._meta.app_label == 'customers' and obj2._meta.app_label == 'customers':
            return True
        return None

    def allow_migrate(self, db, app_label, model_name=None, **hints):
        # 只允许在default数据库(MSSQL)上执行customers app的迁移
        if app_label == 'customers':
            return db == 'default'
        return None

股票行情(MongoDB)路由

class MongoDBRouter:
    def db_for_read(self, model, **hints):
        # 属于stock_data app的模型,读操作走MongoDB
        if model._meta.app_label == 'stock_data':
            return 'mongodb_db'
        return None

    def db_for_write(self, model, **hints):
        # 属于stock_data app的模型,写操作走MongoDB
        if model._meta.app_label == 'stock_data':
            return 'mongodb_db'
        return None

    def allow_relation(self, obj1, obj2, **hints):
        # 允许同属stock_data app的模型之间建立关联
        if obj1._meta.app_label == 'stock_data' and obj2._meta.app_label == 'stock_data':
            return True
        return None

    def allow_migrate(self, db, app_label, model_name=None, **hints):
        # MongoDB不需要执行Django的migrate,直接返回False
        if app_label == 'stock_data':
            return False
        return None

然后在settings.py里添加路由配置:

DATABASE_ROUTERS = ['customers.routers.MSSQLRouter', 'stock_data.routers.MongoDBRouter']

4. 定义模型并指定所属数据库

  • 客户模型(放在customers app的models.py里):
from django.db import models

class Customer(models.Model):
    name = models.CharField(max_length=100)
    email = models.EmailField(unique=True)
    # 其他客户相关字段,比如手机号、注册时间等

    class Meta:
        app_label = 'customers'
  • 股票行情模型(放在stock_data app的models.py里,用djongo的模型类):
from djongo import models

class StockPrice(models.Model):
    stock_code = models.CharField(max_length=20)  # 股票代码,比如AAPL
    timestamp = models.DateTimeField()  # 行情时间戳
    price = models.FloatField()  # 股价
    # 其他行情字段,比如成交量、涨跌幅等

    class Meta:
        app_label = 'stock_data'

5. 实际操作不同数据库

  • 操作MSSQL(客户数据):直接用默认的ORM方法,路由会自动匹配到default数据库
from customers.models import Customer
# 查询所有客户
all_customers = Customer.objects.all()
# 创建新客户
new_customer = Customer(name='张三', email='zhangsan@example.com')
new_customer.save()
  • 操作MongoDB(股票行情数据):需要用using()方法指定数据库
from stock_data.models import StockPrice
from datetime import datetime

# 查询某只股票的行情
aapl_prices = StockPrice.objects.using('mongodb_db').filter(stock_code='AAPL')
# 写入新行情数据
new_price = StockPrice(stock_code='AAPL', timestamp=datetime.now(), price=152.3)
new_price.save(using='mongodb_db')

6. 注意事项

  • MongoDB不需要执行migrate命令,因为djongo会直接把模型映射成MongoDB的集合,运行python manage.py migrate只会对MSSQL生效。如果要单独对MSSQL做迁移,用python manage.py migrate --database=default。
  • 确保你的机器上已经安装了ODBC Driver 17 for SQL Server,并且MongoDB服务处于运行状态。
  • 如果不需要默认数据库,可以把MSSQL的配置名改成mssql_db,然后在路由和操作时指定,但一般保留default作为常用数据库更方便。

内容的提问来源于stack exchange,提问作者Python Kumar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.31 04:31:01