如何在Django中指定GraphQL Schema使用自定义数据库执行Mutation操作
给GraphQL Mutation指定非默认数据库的方法
在Django里给GraphQL Mutation指定非默认数据库,核心是利用Django模型自带的数据库指定能力,以下是几种实用方案:
- 单个模型实例保存时指定数据库
直接在save()方法中添加using参数,参数值对应你在settings.py的DATABASES配置里的非默认数据库别名。
修改你提供的Mutation代码如下:
class CreateCategory(graphene.Mutation): class Arguments: name = graphene.String(required=True) slug = graphene.String(required=True) category = graphene.Field(CategoryType) @classmethod def mutate(cls, root, info, name, slug): category = Category() category.name = name category.slug = slug print(category) try: # 替换成你的非默认数据库别名,比如'db_secondary' category.save(using='db_secondary') except: traceback.print_exc() return CreateCategory(category=category)
- 创建实例时直接指定数据库
如果用objects.create()创建模型实例,可以通过using()先绑定目标数据库,写法更简洁:
# 替换成你的数据库别名 category = Category.objects.using('db_secondary').create(name=name, slug=slug)
- 批量操作时统一指定数据库
如果Mutation里包含多个数据库操作(比如创建、查询、修改多个关联模型),可以用using上下文管理器包裹所有操作,统一指定数据库:
from django.db import using @classmethod def mutate(cls, root, info, name, slug): try: # 缩进内的所有数据库操作都会使用指定的数据库 with using('db_secondary'): category = Category(name=name, slug=slug) category.save() # 这里可以添加其他同数据库的操作,比如关联模型的保存 except: traceback.print_exc() return CreateCategory(category=category)
注意事项
确保你已经在settings.py中正确配置了非默认数据库,示例配置如下:
DATABASES = { 'default': { 'ENGINE': 'django.db.backends.sqlite3', 'NAME': BASE_DIR / 'db.sqlite3', }, 'db_secondary': { 'ENGINE': 'django.db.backends.mysql', 'NAME': 'secondary_db', 'USER': 'db_user', 'PASSWORD': 'db_pass', 'HOST': '127.0.0.1', 'PORT': '3306', } }
内容的提问来源于stack exchange,提问作者Mansi Shah
相关产品推荐
相关产品推荐

