Graphql + Python + Flask

Implementación de Python de Paradigma: Graphql + Spring Boot

Librerías utilizadas:

Configuración

virtualenv --python=python3.6 venv
source venv/bin/activate
pip install -r requirements.txt

Crear bases de datos:

Primero, nuestra NoSQL

from pymongo import MongoClient
client = MongoClient('127.0.0.1', 28000)

db = client.factory

brands = db.brands
brands.insert_one({"name": "seat"})
brands.insert_one({"name": "Ford"})

brands.find_one({"name": "seat"})
brands.find_one({"name": "Ford"})

Si no tienes MongoDB instalado, la opción más rápida para tener un servidor para probar es:

sudo docker run -i -t -p 28000:27017 mongo:latest /usr/bin/mongod --smallfiles

Ahora creamos nuestra base de datos relacional, sustituir los Ids por los que hemos insertado en Mongo

from models import Base, engine
Base.metadata.create_all(engine)
sqlite3 database.sqlite3
-- SEATs
insert into models (name, year, brand_id) values("Ibiza", 2015, "id_from_mongo");
insert into models (name, year, brand_id) values("Arona", 2014, "id_from_mongo");
insert into models (name, year, brand_id) values("León", 2013, "id_from_mongo");
insert into models (name, year, brand_id) values("Alhambra", 2012, "id_from_mongo");
insert into models (name, year, brand_id) values("Ateca", 2011, "id_from_mongo");
insert into models (name, year, brand_id) values("Toledo", 2017, "id_from_mongo");
-- FORDs
insert into models (name, year, brand_id) values("Tourneo", 2001, "id_from_mongo");
insert into models (name, year, brand_id) values("GT", 2017, "id_from_mongo");

insert into cars (color, model_id) values("Green", 1);
insert into cars (color, model_id) values("Blue", 2);
insert into cars (color, model_id) values("Black", 3);
insert into cars (color, model_id) values("White", 4);

Ejecución

python app.py

Esquema

Accede tu mismo al editor de consultas del proyecto una vez arrancado

Ejemplos de consultas y mutaciones:

{
  cars{
    id
    color
    model{
      id
      brandId
      name
      brand{
        id
        name
      }
    }
  }
}
{
  brands{
    id
    name
  }
  brand(id: "59bd6472247be22cc8f46c51"){
    name
  }
}