mongoengine连接和多个数据库 [英] mongoengine connection and multiple databases

查看:395
本文介绍了mongoengine连接和多个数据库的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有2个数据库要查询,但是我只能从其中一个查询结果.我正在将mongoengine与python和graphene一起使用(这是我的第一次).我已经用尽了所有搜索,但不知道如何解决此问题.这是我的代码:

I have 2 databases I want to query from, but I only get results from one. I'm using mongoengine with python and graphene (it's my first time). I've exhausted my search and I don't understand how I can resolve this issue. Here is my code:

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)

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服务器时,运行mongod时,我可以点击/workouts,它将返回我需要的数组.但是/users不会返回结果.

Now when I have my python server up, mongod running I can hit the /workouts and it will return the array I need. But /users will not return the results.

我没有收到错误,我的石墨烯查询也没错.

I get no errors, nothing is wrong with my graphene query.

我只能一次获得一个查询.

I can only get one of the queries to work at once.

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

I have tried using alias, not closing the connections, declaring the connect at the top level even before class UserModel or Workout.

推荐答案

如果每个模型都绑定到不同的数据库.您应使用类似以下内容(cfr docs ):

If each of your model is bound to a different database. You should use something like this (cfr docs):

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()
    ...

这篇关于mongoengine连接和多个数据库的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆