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

array<anytype>

edgedb.Array

anytuple

edgedb.Tuple or edgedb.NamedTuple

anyenum

str

Object

edgedb.Object

bool

bool

bytes

bytes

str

str

local_date

datetime.date

local_time

offset-naïve datetime.time

local_datetime

offset-naïve datetime.datetime

datetime

offset-aware datetime.datetime

duration

edgedb.Duration

float32, float64

float

int16, int32, int64

int

decimal

Decimal

json

str

uuid

uuid.UUID

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.

class Set

A representation of an immutable set of values returned by a query.

The BlockingIOConnection.fetchall() and AsyncIOConnection.fetchall() 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.

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
>>> 
conn = edgedb.connect()
>>> 
... 
... 
... 
r = conn.fetchone('''
    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
>>> 
conn = edgedb.connect()
>>> 
... 
... 
... 
... 
r = conn.fetchone('''
    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'
class Tuple

An immutable value representing an EdgeDB tuple value.

Instances of edgedb.Tuple generally behave exactly like standard Python tuples:

>>> 
import edgedb
>>> 
conn = edgedb.connect()
>>> 
r = conn.fetchone('''SELECT (1, 'a', [3])''')
>>> 
r
(1, 'a', [3])
>>> 
len(r)
3
>>> 
r[1]
'a'
>>> 
r == (1, 'a', [3])
True
class NamedTuple

An immutable value representing an EdgeDB named tuple value.

Instances of edgedb.NamedTuple generally behave similarly to namedtuple:

>>> 
import edgedb
>>> 
conn = edgedb.connect()
>>> 
r = conn.fetchone('''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
class Array

An immutable value representing an EdgeDB array value.

>>> 
import edgedb
>>> 
conn = edgedb.connect()
>>> 
r = conn.fetchone('''SELECT [1, 2, 3]''')
>>> 
r
[1, 2, 3]
>>> 
len(r)
3
>>> 
r[1]
2
>>> 
r == [1, 2, 3]
True
class Duration(*, months, days, microseconds)

A Python representation of an EdgeDB duration value.

attribute Duration.months

The number of months in the duration.

attribute Duration.days

The number of days in the duration.

attribute Duration.microseconds

The number of microseconds in the duration.