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. 定义模型并指定所属数据库
- 客户模型(放在
customersapp的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_dataapp的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
相关产品推荐
相关产品推荐

