-
Notifications
You must be signed in to change notification settings - Fork 823
Native SQLAlchemy integration/bindings #74
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Comments
I'm working on something with no security implications (all data is public), so s a make-shift solution (don't use in production), I'm registering (pseudo code) all models using the following approach crufty:
[1] see https://github.com/thegroovebox/api.groovebox.org/blob/master/groovebox/api/core.py#L33 Note: _decl_class_registry has some non-models registered with it (e.g. _sa_module_registry), so additional error handling / logic is required. |
@jfeinstein10 already did an amazing work trying to integrate I'm going to fork its sqlalchemy graphene branch and preserve his work updated with the recent changes of graphene. |
Work in progress pull request: #87 |
@jfeinstein10 I saw this code : class SQLAlchemyNode(BaseNode, SQLAlchemyInterface):
id = GlobalIDField()
@classmethod
def get_node(cls, id, info=None):
try:
instance = cls._meta.model.filter(id=id).one()
return cls(instance)
except cls._meta.model.DoesNotExist:
return None In the
@syrusakbary I'm working on sqlalchemy backend, any progress would be interested. |
@gwind some code ported by @jfeinstein10 was not updated to reflect the SQLAlchemy nature, as you exposed. However is actually fixed by some commits I did recently: https://github.com/graphql-python/graphene/blob/sqlalchemy/graphene/contrib/sqlalchemy/types.py#L122
Feel free to fork this work and do any improvements! |
@syrusakbary may be a I have a local sqlachemy binding, but it is very basic, and i am not familiar with graphql - relay. |
@syrusakbary I've saw that So my concern about I've another question: the graphene convert all id to example: class RootQuery(graphene.ObjectType):
group = graphene.Field(Group, id=graphene.String().NonNull)
def resolve_group(self, args, info):
print("args.get('id') = ", args.get('id')) this query is ok:
but query one object is failed:
In graphene/relay/types , there is a to_global_id() , but no a reverse method such like from_global_id() : class Node(six.with_metaclass(NodeMeta, Interface)):
'''An object with an ID'''
id = GlobalIDField()
class Meta:
abstract = True
def to_global_id(self):
type_name = self._meta.type_name
return to_global_id(type_name, self.id)
connection_type = Connection
edge_type = Edge
@classmethod
def get_connection_type(cls):
return cls.connection_type
@classmethod
def get_edge_type(cls):
return cls.edge_type graphql_relay/node/node.py have a from_global_id() indeed def from_global_id(global_id):
'''
Takes the "global ID" created by toGlobalID, and retuns the type name and ID
used to create it.
'''
unbased_global_id = unbase64(global_id)
_type, _id = unbased_global_id.split(':', 1)
return ResolvedGlobalId(_type, _id) Is there a nice method to handle this ? |
Graphene is using However you can customize the |
I see, thanks 😄 |
SQLAlchemy support is now merged into master, closing the issue 😎 |
…-name graphql-python#63 Get name of reverse_fields from model.__dict__
See #51, similarly GraphQL-python-archive/graphql-epoxy#5
The text was updated successfully, but these errors were encountered: