title: sqlalchemy.orm interfaces Example Code category: page slug: sqlalchemy-orm-interfaces-examples sortorder: 500031067 toc: False sidebartitle: sqlalchemy.orm interfaces meta: Python example code that shows how to use the interfaces callable from the sqlalchemy.orm module of the SQLAlchemy project.
interfaces is a callable within the sqlalchemy.orm module of the SQLAlchemy project.
ColumnProperty,
CompositeProperty,
Load,
Mapper,
Query,
RelationshipProperty,
Session,
SynonymProperty,
aliased,
attributes,
backref,
class_mapper,
column_property,
composite,
mapper,
mapperlib,
object_mapper,
object_session,
query,
relationship,
session,
sessionmaker,
and strategies
are several other callables with code examples from the same sqlalchemy.orm package.
graphene-sqlalchemy (project documentation and PyPI package information) is a SQLAlchemy integration for Graphene, which makes it easier to build GraphQL-based APIs into Python web applications. The package allows you to subclass SQLAlchemy classes and build queries around them with custom code to match the backend queries with the GraphQL-based request queries. The project is provided as open source under the MIT license.
graphene-sqlalchemy / graphene_sqlalchemy / converter.py
# converter.py
from enum import EnumMeta
from singledispatch import singledispatch
from sqlalchemy import types
from sqlalchemy.dialects import postgresql
~~from sqlalchemy.orm import interfaces, strategies
from graphene import (ID, Boolean, Dynamic, Enum, Field, Float, Int, List,
String)
from graphene.types.json import JSONString
from .batching import get_batch_resolver
from .enums import enum_for_sa_enum
from .fields import (BatchSQLAlchemyConnectionField,
default_connection_field_factory)
from .registry import get_global_registry
from .resolvers import get_attr_resolver, get_custom_resolver
try:
from sqlalchemy_utils import ChoiceType, JSONType, ScalarListType, TSVectorType
except ImportError:
ChoiceType = JSONType = ScalarListType = TSVectorType = object
is_selectin_available = getattr(strategies, 'SelectInLoader', None)
def get_column_doc(column):
return getattr(column, "doc", None)
def is_column_nullable(column):
return bool(getattr(column, "nullable", True))
def convert_sqlalchemy_relationship(relationship_prop, obj_type, connection_field_factory, batching,
orm_field_name, **field_kwargs):
def dynamic_type():
direction = relationship_prop.direction
child_type = obj_type._meta.registry.get_type_for_model(relationship_prop.mapper.entity)
batching_ = batching if is_selectin_available else False
if not child_type:
return None
~~ if direction == interfaces.MANYTOONE or not relationship_prop.uselist:
return _convert_o2o_or_m2o_relationship(relationship_prop, obj_type, batching_, orm_field_name,
**field_kwargs)
~~ if direction in (interfaces.ONETOMANY, interfaces.MANYTOMANY):
return _convert_o2m_or_m2m_relationship(relationship_prop, obj_type, batching_,
connection_field_factory, **field_kwargs)
return Dynamic(dynamic_type)
def _convert_o2o_or_m2o_relationship(relationship_prop, obj_type, batching, orm_field_name, **field_kwargs):
child_type = obj_type._meta.registry.get_type_for_model(relationship_prop.mapper.entity)
resolver = get_custom_resolver(obj_type, orm_field_name)
if resolver is None:
resolver = get_batch_resolver(relationship_prop) if batching else \
get_attr_resolver(obj_type, relationship_prop.key)
return Field(child_type, resolver=resolver, **field_kwargs)
def _convert_o2m_or_m2m_relationship(relationship_prop, obj_type, batching, connection_field_factory, **field_kwargs):
child_type = obj_type._meta.registry.get_type_for_model(relationship_prop.mapper.entity)
if not child_type._meta.connection:
return Field(List(child_type), **field_kwargs)
if connection_field_factory is None:
## ... source file continues with no further interfaces examples...