Schema No need for an ORM. Support for indexes, constraints, JSON, user-defined functions, etc. type Person { required property name -> str; required property bio -> str; } type Movie { required property title -> str; required property year -> int16; required property desc -> str; multi link cast -> Person; multi link directors -> Person; }
deep data hierarchies. Aims to be more powerful than SQL. SELECT Movie { title, desc, cast: { name, bio } ORDER BY .name, } FILTER Movie.year IN {2018, 2019};
} } FILTER .year = 2019; SELECT Movie.title, Movie.year, array_agg((SELECT Person.name FROM Person INNER JOIN Movie_Cast ON Person.id = Movie_Cast.person_id WHERE MovieCast.movie_id = movie.id )) FROM Movie WHERE Movie.year = 2019; EdgeQL SQL
ON Person.id = Movie_Cast.person_id WHERE MovieCast.movie_id = movie.id )) FROM Movie WHERE EXISTS( (SELECT FROM Movie_Cast INNER JOIN Person ON Movie_Cast.person_id = Person.id WHERE Movie_Cast.movie_id = Movie.id AND Person.name = 'Tom Hardy' ) ); SELECT Movie { title, year, cast: { name } } FILTER .cast.name = 'Tom Hardy'; EdgeQL SQL
AS ( SELECT movie_id, count FROM MovieReviewCount WHERE EXISTS ( SELECT FROM Movie_Cast INNER JOIN Person ON (Movie_Cast.person_id = Person.id) WHERE MovieReviewCount.movie_id = Movie_Cast.movie_id AND Person.name = 'Tom Hardy' ) ), ZoeSaldanaMovies AS ( SELECT movie_id, count FROM MovieReviewCount WHERE EXISTS ( SELECT FROM Movie_Cast INNER JOIN Person ON (Movie_Cast.person_id = Person.id)
Python Same EdgeQL query can return results as Python objects or as JSON. movie = conn.fetchone( 'SELECT Movie {title}') print(movie.title) # or movie_json = conn.fetchone_json( 'SELECT Movie {title}') print(movie_json)