首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >mongoengine连接和多个数据库

mongoengine连接和多个数据库
EN

Stack Overflow用户
提问于 2019-04-09 09:53:52
回答 1查看 3.4K关注 0票数 4

我有两个要查询的数据库,但我只从一个数据库中获得结果。我将mongoengine与python和石墨烯一起使用(这是我第一次)。我已经用尽了我的搜索,我不知道我该如何解决这个问题。下面是我的代码:

代码语言:javascript
运行
复制
import graphene
from mongoengine import Document, connect
from mongoengine.context_managers import switch_collection
from mongoengine.fields import (
    StringField,
    UUIDField,
    IntField,
    FloatField,
    BooleanField,
)
from graphene_mongo import MongoengineObjectType
from mongoengine.connection import disconnect


class UserModel(Document):
    meta = {"collection": "users"}

    userID = UUIDField()
    first_name = StringField()
    last_name = StringField()


class Users(MongoengineObjectType):
    class Meta:
        model = UserModel


class UsersQuery(graphene.ObjectType):
    users = graphene.List(Users)
    user = graphene.Field(Users, userID=graphene.UUID())

    def resolve_users(self, info):
        db = connect("users")
        users = list(UserModel.objects.all())
        db.close()
        return users

    def resolve_user(self, info, userID):
        return UserModel.objects(userID=userID).first()


users_schema = graphene.Schema(query=UsersQuery)
代码语言:javascript
运行
复制
import graphene
from mongoengine import Document, connect
from mongoengine.fields import StringField, UUIDField
from graphene_mongo import MongoengineObjectType
from mongoengine.connection import disconnect


class Workout(Document):
    meta = {"collection": "workouts"}

    workoutID = UUIDField()
    workout_label = StringField()


class Workouts(MongoengineObjectType):
    class Meta:
        model = Workout


class Query(graphene.ObjectType):
    workouts = graphene.List(Workouts)
    workout = graphene.Field(Workouts, workoutID=graphene.UUID())

    def resolve_workouts(self, info):
        db = connect("workouts")
        wks = list(Workout.objects.all())
        db.close()
        return wks

    def resolve_workout(self, info, workoutID):
        return Workout.objects(workoutID=workoutID).first()


workouts_schema = graphene.Schema(query=Query)

现在,当我启动我的python服务器时,我可以点击/workouts,它会返回我需要的数组。但是/users不会返回结果。

我没有得到错误,我的石墨烯查询没有任何错误。

我一次只能让其中一个查询生效。

我尝试使用别名,而不是关闭连接,甚至在类UserModel或Workout之前就在顶层声明连接。

EN

回答 1

Stack Overflow用户

发布于 2019-06-04 04:37:14

如果您的每个模型都绑定到不同的数据库。您应该像这样使用(cfr docs):

代码语言:javascript
运行
复制
connect('workouts', alias='dbworkouts')  # init a connection to database named "workouts" and register it under alias "dbworkouts"
connect('users', alias='dbusers')    

class Workout(Document):
    meta = {"db_alias": "dbworkouts"}
    workoutID = UUIDField()
    ...

class UserModel(Document):
    meta = {"db_alias": "dbusers"}
    userID = UUIDField()
    ...
票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55584024

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档