Light
Dark
System

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

Set

edgedb.Set

array<anytype>

edgedb.Array

anytuple

edgedb.Tuple or edgedb.NamedTuple

anyenum

edgedb.EnumValue

Object

edgedb.Object

bool

bool

bytes

bytes

str

str

cal::local_date

datetime.date

cal::local_time

offset-naive datetime.time

cal::local_datetime

offset-naive datetime.datetime

cal::relative_duration

edgedb.RelativeDuration

cal::date_duration

edgedb.DateDuration

datetime

offset-aware datetime.datetime

duration

datetime.timedelta

float32, float64

float

int16, int32, int64, bigint

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

This is list since version 1.0.

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:

Copy
>>> 
import edgedb
Copy
>>> 
client = edgedb.create_client()
Copy
>>> 
... 
... 
... 
r = client.query_single('''
    SELECT schema::ObjectType {name}
    FILTER .name = 'std::Object'
    LIMIT 1''')
Copy
>>> 
r
Object{name := 'std::Object'}
Copy
>>> 
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:

Copy
>>> 
import edgedb
Copy
>>> 
client = edgedb.create_client()
Copy
>>> 
... 
... 
... 
... 
r = client.query_single('''
    SELECT schema::Property {name, annotations: {name, @value}}
    FILTER .name = 'listen_port'
           AND .source.name = 'cfg::Config'
    LIMIT 1''')
Copy
>>> 
r
Object {
    name: 'listen_port',
    annotations: {
        Object {
            name: 'cfg::system',
            @value: 'true'
        }
    }
}
Copy
>>> 
r['annotations']
LinkSet(name='annotations')
Copy
>>> 
l = list(r['annotations])[0]
Copy
>>> 
l.value
'true'
class
Tuple

This is tuple since version 1.0.

class
NamedTuple

An immutable value representing an EdgeDB named tuple value.

Instances of edgedb.NamedTuple generally behave similarly to namedtuple:

Copy
>>> 
import edgedb
Copy
>>> 
client = edgedb.create_client()
Copy
>>> 
r = client.query_single('''SELECT (a := 1, b := 'a', c := [3])''')
Copy
>>> 
r
(a := 1, b := 'a', c := [3])
Copy
>>> 
r.b
'a'
Copy
>>> 
r[0]
1
Copy
>>> 
r == (1, 'a', [3])
True
Copy
>>> 
r._fields
('a', 'b', 'c')
class
Array

This is list since version 1.0.

class
RelativeDuration

An immutable value representing an EdgeDB cal::relative_duration value.

Copy
>>> 
import edgedb
Copy
>>> 
client = edgedb.create_client()
Copy
>>> 
r = client.query_single('''SELECT <cal::relative_duration>"1 year 2 days 3 seconds"''')
Copy
>>> 
r
<edgedb.RelativeDuration "P1Y2DT3S">
Copy
>>> 
r.months
12
Copy
>>> 
r.days
2
Copy
>>> 
r.microseconds
3000000
class
DateDuration

An immutable value representing an EdgeDB cal::date_duration value.

Copy
>>> 
import edgedb
Copy
>>> 
client = edgedb.create_client()
Copy
>>> 
r = client.query_single('''SELECT <cal::date_duration>"1 year 2 days"''')
Copy
>>> 
r
<edgedb.DateDuration "P1Y2D">
Copy
>>> 
r.months
12
Copy
>>> 
r.days
2
class
EnumValue

An immutable value representing an EdgeDB enum value.

Copy
>>> 
import edgedb
Copy
>>> 
client = edgedb.create_client()
Copy
>>> 
r = client.query_single("""SELECT <Color>'red'""")
Copy
>>> 
r
<edgedb.EnumValue 'red'>
Copy
>>> 
str(r)
'red'
Copy
>>> 
r.value  # added in 1.0
'red'
Copy
>>> 
r.name  # added in 1.0, simply str.upper() of r.value
'RED'
Light
Dark
System