-
Notifications
You must be signed in to change notification settings - Fork 125
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
What is the correctly way to delete edges with orientdb OGM in django rest framework? #284
Comments
Huh, you're right!
I'm surprised that functionality was never added.
…On Mon, 10 Jun 2019, 07:02 Manuel Carrero ***@***.***> wrote:
I was wondering if exists some command like delete_edge(), to delete an
specific edge row.
I don't know how to create a method to delete edges in django rest
framework, using orientdb OGM.
I'm using pyorient==1.5.5 and OrientDB 3.0.18 version.
I have two vertex Classes: ousers, ocompany. Also I have two relationships
(edges) Classes: ofriends, oworksat. So for example:
To make a ofriends relationship I need two ousers. And to make a oworksat
relationship I need one ouser and one ocompany. Every relationship has it
own cluster id.
I know that I can access to these functions:
*(Pdb) dir(graph)*
['PROPERTY_TYPES', '_GROOVY_GET_DB', '_GROOVY_NULL_LISTENER',
'_GROOVY_TRY', 'class', 'delattr', 'dict', 'dir', 'doc', 'eq', 'format',
'ge', 'getattribute', 'gt', 'hash', 'init', 'le', 'lt', 'module', 'ne',
'new', 'reduce', 'reduce_ex', 'repr', 'setattr', 'sizeof', 'str',
'subclasshook', 'weakref', '_last_cred', '_last_db', '_last_user', 'batch',
'both', 'bothE', 'build_mapping', 'clear_registry', 'client',
'coerce_class_names', 'coerce_class_names_to_quoted',
'compute_all_properties', 'config', 'create_all', 'create_class',
'create_edge', 'create_edge_command', 'create_function',
'create_props_mapping', 'create_vertex', 'create_vertex_command',
'delete_vertex', 'delete_vertex_command', 'drop', 'drop_all', 'drop_class',
'edge_from_record', 'edges_from_records', 'element_from_link',
'element_from_record', 'elements_from_links', 'elements_from_records',
'export', 'get_edge', 'get_element', 'get_vertex', 'gremlin',
'guard_reserved_words', 'inE', 'in_', 'include', 'init_broker_for_class',
'list_superclasses', 'ocompany', 'ofriends', 'open', 'ousers', 'out',
'outE', 'oworksat', 'populate', 'property_from_schema', 'props_from_db',
'props_to_db', 'query', 'registry', 'save_element', 'scripts',
'server_version', 'strict', 'toposort_classes', 'valid_element_base',
'vertex_from_record', 'vertexes_from_records']
If I do:
graph.delete_vertex("#21:0")
It works good and deletes #21
<#21>:0 ouser vertex row, which
is part of ofriends and oworskat relationships, so also, that command
deletes the relationship where that vertex is included. Obviously, I don't
want to delete the entire vertex, just only the specific edge (not the
class, just the relationship row).
I was wondering if exists some command like delete_edge(), but dir(graph)
don't tell me nothing related.
*settings.py*
from pyorient.ogm import Graph, Config
from pyorient.serializations import OrientSerialization
from pyorient.ogm import declarative
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
config = RawConfigParser()
config.read(BASE_DIR + '/settings.ini')
ORIENTDB = {
'NAME': config.get('orientdbConf', 'DB_NAME'),
'USER': config.get('orientdbConf', 'DB_USER'),
'PASSWORD': config.get('orientdbConf', 'DB_PASS'),
'HOST': config.get('orientdbConf', 'DB_HOST'),
'PORT': config.get('orientdbConf', 'DB_PORT'),
}
Config.from_url('plocal://'+ORIENTDB['HOST']+':'+str(ORIENTDB['PORT'])+'/'+ORIENTDB['NAME']+'',''+ORIENTDB['USER']+'', ''+ORIENTDB['PASSWORD']+'',initial_drop=False,serialization_type=OrientSerialization.Binary)
graph = Graph(Config.from_url(''+ORIENTDB['HOST']+'/'+ORIENTDB['NAME']+'',''+ORIENTDB['USER']+'', ''+ORIENTDB['PASSWORD']+'',initial_drop=False))
Node = declarative.declarative_node()
Relationship = declarative.declarative_relationship()
*models.py*
from core.settings import Node,Relationship,graph
from pyorient.ogm.property import (String, Date, DateTime, Decimal, Double,
Integer, Boolean, EmbeddedMap, EmbeddedSet,Link, UUID)
class OUsers(Node):
element_plural = 'ousers'
postgresql_id=Integer(nullable=False,unique=True)
class OCompany(Node):
element_plural = 'ocompany'
postgresql_id=Integer(nullable=False,unique=True)
class OFriends(Relationship):
label = 'ofriends'
from_postgresql_ouser_id=Integer(nullable=False,unique=True)
to_postgresql_ouser_id=Integer(nullable=False,unique=True)
class OWorksAt(Relationship):
label = 'oworksat'
from_postgresql_ouser_id=Integer(nullable=False,unique=True)
to_postgresql_ocompany_id=Integer(nullable=False,unique=True)
graph.create_all(Node.registry)
graph.create_all(Relationship.registry)
*serializers.py*
from .models import (OUsers,OCompany,OFriends,OWorksAt)
from rest_framework import serializers
from django.contrib.auth import get_user_model
User = get_user_model()
class OFriendsSerializer(serializers.Serializer):
from_postgresql_ouser_id = serializers.IntegerField()
to_postgresql_ouser_id = serializers.IntegerField()
def create(self, data):
return OFriends.objects.create(**data)
def update(self, instance, data):
instance.from_postgresql_ouser_id = data.get("from_postgresql_ouser_id")
instance.to_postgresql_ouser_id = data.get("to_postgresql_ouser_id")
instance.save()
return instance
class OFriendsSerializer(serializers.Serializer):
from_postgresql_ouser_id = serializers.IntegerField()
to_postgresql_ouser_id = serializers.IntegerField()
def create(self, data):
return OFriends.objects.create(**data)
def update(self, instance, data):
instance.from_postgresql_ouser_id = data.get("from_postgresql_ouser_id")
instance.to_postgresql_ouser_id = data.get("to_postgresql_ouser_id")
instance.save()
return instance
*api.py*
class OFriendsViewSet(viewsets.ModelViewSet):
def destroy(self, request, *args, **kwargs):
queryset = graph.ofriends.query()
import pdb;pdb.set_trace()
# HERE should be the command
—
You are receiving this because you are subscribed to this thread.
Reply to this email directly, view it on GitHub
<#284?email_source=notifications&email_token=ACYK4O3U7EL2VE3AUFMYUULPZVHUNA5CNFSM4HWMY7W2YY3PNVWWK3TUL52HS4DFUVEXG43VMWVGG33NNVSW45C7NFSM4GYOMSJA>,
or mute the thread
<https://github.com/notifications/unsubscribe-auth/ACYK4OYCMXZS5VWWYL33SX3PZVHUNANCNFSM4HWMY7WQ>
.
|
Thanks! Is there any plan to add this functionality in a near future? At the moment, I only could work with raw queries to delete the edge |
At the moment, I solved my problem using pyorient client, with raw query: pyorient_client.py
And in the api.py
Maybe this could be useful for anyone else. Note that I receive o'friends rid as a parameter (by passing the id in DELETE method in swagger UI). |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
I was wondering if exists some command like delete_edge(), to delete a specific edge row.
I don't know how to create a method to delete edges in django rest framework, using orientdb OGM.
I'm using pyorient==1.5.5 and OrientDB 3.0.18 version.
I have two vertex Classes: ousers, ocompany. Also I have two relationships (edges) Classes: ofriends, oworksat. So for example:
To make a ofriends relationship I need two ousers. And to make a oworksat relationship I need one ouser and one ocompany. Every relationship has it own cluster id.
I know that I can access to these functions:
(Pdb) dir(graph)
['PROPERTY_TYPES', '_GROOVY_GET_DB', '_GROOVY_NULL_LISTENER', '_GROOVY_TRY', 'class', 'delattr', 'dict', 'dir', 'doc', 'eq', 'format', 'ge', 'getattribute', 'gt', 'hash', 'init', 'le', 'lt', 'module', 'ne', 'new', 'reduce', 'reduce_ex', 'repr', 'setattr', 'sizeof', 'str', 'subclasshook', 'weakref', '_last_cred', '_last_db', '_last_user', 'batch', 'both', 'bothE', 'build_mapping', 'clear_registry', 'client', 'coerce_class_names', 'coerce_class_names_to_quoted', 'compute_all_properties', 'config', 'create_all', 'create_class', 'create_edge', 'create_edge_command', 'create_function', 'create_props_mapping', 'create_vertex', 'create_vertex_command', 'delete_vertex', 'delete_vertex_command', 'drop', 'drop_all', 'drop_class', 'edge_from_record', 'edges_from_records', 'element_from_link', 'element_from_record', 'elements_from_links', 'elements_from_records', 'export', 'get_edge', 'get_element', 'get_vertex', 'gremlin', 'guard_reserved_words', 'inE', 'in_', 'include', 'init_broker_for_class', 'list_superclasses', 'ocompany', 'ofriends', 'open', 'ousers', 'out', 'outE', 'oworksat', 'populate', 'property_from_schema', 'props_from_db', 'props_to_db', 'query', 'registry', 'save_element', 'scripts', 'server_version', 'strict', 'toposort_classes', 'valid_element_base', 'vertex_from_record', 'vertexes_from_records']
If I do:
graph.delete_vertex("#21:0")
It works good and deletes #21:0 ouser vertex row, which is part of ofriends and oworskat relationships, so also, that command deletes the relationship where that vertex is included. Obviously, I don't want to delete the entire vertex, just only the specific edge (not the class, just the relationship row).
I was wondering if exists some command like delete_edge(), but dir(graph) don't tell me nothing related.
settings.py
models.py
serializers.py
api.py
The text was updated successfully, but these errors were encountered: