Tips

Querying

In order to make querying against the database work, there are two alternatives:

  • Set the db session when you do the execution:

schema = graphene.Schema()
schema.execute(context_value={'session': session})
  • Create a query for the models.

Base = declarative_base()
Base.query = db_session.query_property()

class MyModel(Base):
    # ...

If you don’t specify any, the following error will be displayed:

A query in the model Base or a session in the schema is required for querying.

Sorting

By default the SQLAlchemyConnectionField sorts the result elements over the primary key(s). The query has a sort argument which allows to sort over a different column(s)

Given the model

class Pet(Base):
    __tablename__ = 'pets'
    id = Column(Integer(), primary_key=True)
    name = Column(String(30))
    pet_kind = Column(Enum('cat', 'dog', name='pet_kind'), nullable=False)


class PetNode(SQLAlchemyObjectType):
    class Meta:
        model = Pet


class Query(ObjectType):
    allPets = SQLAlchemyConnectionField(PetNode.connection)

some of the allowed queries are

  • Sort in ascending order over the name column

allPets(sort: name_asc){
    edges {
        node {
            name
        }
    }
}
  • Sort in descending order over the per_kind column and in ascending order over the name column

allPets(sort: [pet_kind_desc, name_asc]) {
    edges {
        node {
            name
            petKind
        }
    }
}