简体   繁体   中英

How can I pass to graphql more than one record using Orientdb and Flask?

I has the following code, i try to build and microservice that allow me get specific fields in my application, am beginning with orientdb and graphql:

from flask import Flask, request
import graphene
import json
import pyorient

app = Flask(__name__)

class Person(graphene.ObjectType):
  name = graphene.String()
  middle_name = graphene.String()
  last_name = graphene.String()

class Query(graphene.ObjectType):

  person = graphene.Field(Person, id=graphene.Argument(graphene.Int))
  persons = graphene.Field(Person)

def resolve_person(self, info, id):
    with open('orientdb_config.json') as config_file:
        orient_config = json.load(config_file)
        try:
            client = pyorient.OrientDB(orient_config["host"], orient_config["port"])
            session_id = client.connect(orient_config["user"], orient_config["password"])
            client.db_open(orient_config["database"], orient_config["user"], orient_config["password"])
            if client is not None:
                query = "SELECT * FROM Person WHERE @rid = #12: %(id)s" % {'id': id}
                data = client.query(query)
                print(data[0])
                return data[0]
            else:
                return None
        except Exception as e:
            return None

def resolve_persons(self, info):
    with open('orientdb_config.json') as config_file:
        orient_config = json.load(config_file)
        try:
            client = pyorient.OrientDB(orient_config["host"], orient_config["port"])
            session_id = client.connect(orient_config["user"], orient_config["password"])
            client.db_open(orient_config["database"], orient_config["user"], orient_config["password"])
            if client is not None:
                query = "SELECT * FROM Person"
                data = client.query(query)
                result = []
                for d in data:
                    result.append(d)
                return result
            else:
                return None
        except Exception as e:
            return None

schema = graphene.Schema(query=Query)

@app.route("/", methods=['POST'])
def main():
data = json.loads(request.data)
return json.dumps(schema.execute(data['query']).data)

if __name__ == '__main__':
app.run(host='0.0.0.0', port=5002, debug=True)

Everything seems to work when I request a Person using its id, but when I try to obtain all the people, graphql responds with a null value, I verify the result of the query and the value is there.

在您的GraphQL定义中,您应该具有

persons = graphene.List(lambda: Person)

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM