Datatypes
edgedb-python automatically converts EdgeDB types to the corresponding Python types and vice versa.
The table below shows the correspondence between EdgeDB and Python types.
EdgeDB Type | Python Type |
---|---|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| offset-naive datetime.time |
| offset-naive datetime.datetime |
| |
| |
| offset-aware datetime.datetime |
| |
| |
| |
| |
| |
|
Inexact single-precision float
values may have a different representation when decoded into a Python float. This is inherent to the implementation of limited-precision floating point types. If you need the decimal representation to match, cast the expression to float64
or decimal
in your query.
Sets
class
Set
A representation of an immutable set of values returned by a query.
The AsyncIOClient.query() and Client.query() methods return an instance of this type. Nested sets in the result are also returned as Set
objects.
interface
len(s)
Return the number of fields in set s.
interface
iter(s)
Return an iterator over the values of the set s.
Objects
class
Object
An immutable representation of an object instance returned from a query.
The value of an object property or a link can be accessed through a corresponding attribute:
>>>
import edgedb
>>>
client = edgedb.create_client()
>>>
...
...
...
r = client.query_single('''
SELECT schema::ObjectType {name}
FILTER .name = 'std::Object'
LIMIT 1''')
>>>
r
Object{name := 'std::Object'}
>>>
r.name
'std::Object'
interface
obj[linkname]
Return a edgedb.Link or a edgedb.LinkSet instance representing the instance(s) of link linkname associated with obj.
Example:
>>>
import edgedb
>>>
client = edgedb.create_client()
>>>
...
...
...
...
r = client.query_single('''
SELECT schema::Property {name, annotations: {name, @value}}
FILTER .name = 'listen_port'
AND .source.name = 'cfg::Config'
LIMIT 1''')
>>>
r
Object {
name: 'listen_port',
annotations: {
Object {
name: 'cfg::system',
@value: 'true'
}
}
}
>>>
r['annotations']
LinkSet(name='annotations')
>>>
l = list(r['annotations])[0]
>>>
l.value
'true'
Links
class
Link
An immutable representation of an object link.
Links are created when edgedb.Object is accessed via a []
operator. Using Link objects explicitly is useful for accessing link properties.
class
LinkSet
An immutable representation of a set of Links.
LinkSets are created when a multi link on edgedb.Object is accessed via a []
operator.
Tuples
class
Tuple
An immutable value representing an EdgeDB tuple value.
Instances of edgedb.Tuple
generally behave exactly like standard Python tuples:
>>>
import edgedb
>>>
client = edgedb.create_client()
>>>
r = client.query_single('''SELECT (1, 'a', [3])''')
>>>
r
(1, 'a', [3])
>>>
len(r)
3
>>>
r[1]
'a'
>>>
r == (1, 'a', [3])
True
Named Tuples
class
NamedTuple
An immutable value representing an EdgeDB named tuple value.
Instances of edgedb.NamedTuple
generally behave similarly to namedtuple:
>>>
import edgedb
>>>
client = edgedb.create_client()
>>>
r = client.query_single('''SELECT (a := 1, b := 'a', c := [3])''')
>>>
r
(a := 1, b := 'a', c := [3])
>>>
r.b
'a'
>>>
r[0]
1
>>>
r == (1, 'a', [3])
True
Arrays
class
Array
An immutable value representing an EdgeDB array value.
>>>
import edgedb
>>>
client = edgedb.create_client()
>>>
r = client.query_single('''SELECT [1, 2, 3]''')
>>>
r
[1, 2, 3]
>>>
len(r)
3
>>>
r[1]
2
>>>
r == [1, 2, 3]
True
RelativeDuration
class
RelativeDuration
An immutable value represeting an EdgeDB cal::relative_duration
value.
>>>
import edgedb
>>>
client = edgedb.create_client()
>>>
r = client.query_single('''SELECT <cal::relative_duration>"1 year 2 days 3 seconds"''')
>>>
r
<edgedb.RelativeDuration "P1Y2DT3S">
>>>
r.months
12
>>>
r.days
2
>>>
r.microseconds
3000000
DateDuration
class
DateDuration
An immutable value represeting an EdgeDB cal::date_duration
value.
>>>
import edgedb
>>>
client = edgedb.create_client()
>>>
r = client.query_single('''SELECT <cal::date_duration>"1 year 2 days"''')
>>>
r
<edgedb.DateDuration "P1Y2D">
>>>
r.months
12
>>>
r.days
2