gel-python is the official Gel driver for Python. It provides both blocking IO and asyncio implementations.
The library requires Python 3.9 or later.
The project documentation can be found here.
The library is available on PyPI. Use pip
to install it:
$ pip install gel
import datetime
import gel
def main():
client = gel.create_client()
# Create a User object type
client.execute('''
CREATE TYPE User {
CREATE REQUIRED PROPERTY name -> str;
CREATE PROPERTY dob -> cal::local_date;
}
''')
# Insert a new User object
client.query('''
INSERT User {
name := <str>$name,
dob := <cal::local_date>$dob
}
''', name='Bob', dob=datetime.date(1984, 3, 1))
# Select User objects.
user_set = client.query(
'SELECT User {name, dob} FILTER .name = <str>$name', name='Bob')
# *user_set* now contains
# Set{Object{name := 'Bob', dob := datetime.date(1984, 3, 1)}}
# Close the client.
client.close()
if __name__ == '__main__':
main()
We provide a models
generator that lets you build queries programmatically, and generate Pydantic models directly from your schema.
To use, run the following command:
$ gel generate py/models
This will find your Python project and add a models
package to it. Then you can use the generated models to build queries and mutate instances of your objects directly.
import datetime
from models import User, std
from gel import create_client
def main():
client = create_client()
# Create a new User instance and save it to the database
bob = User(name='Bob', dob=datetime.date(1984, 3, 1))
client.save(bob)
# Select all Users
users = client.query(User)
# Select all users with names like "Bob"
bob_like = client.query(User.filter(lambda u: std.ilike(u.name, '%bob%')))
# Update an object
bob.name = 'Robert'
client.save(bob)
# Delete an object
client.execute(User.filter(id=bob.id).delete())
client.close()
if __name__ == '__main__':
main()
Instructions for installing Gel and gel-python locally can be found at docs.geldata.com/resources/guides/contributing/code.
To run the test suite, run $ python setup.py test
.
gel-python is developed and distributed under the Apache 2.0 license.