NewYour coding agent can read the release notes before it upgrades.Set up the MCP server →
PyPI · #2018 most downloaded on PyPI
Python Driver for ArangoDB
Last release 18 days ago
31 Aug 2026
Ships fairly regularly
a new release about every 6 weeks
Nearly every release is documented
notes for 59 of the last 60 stable releases
1 version withdrawn
withdrawn after publishing
10 years old
82 releases · first in 2016
Added support for ArangoDB version 3.4.
db.status.db.aql.entries.db.aql.functions, db.aql.create_function and db.aql.delete_function to account for ArangoDB 3.4 API changes.db.views, db.view, db.create_view, db.update_view, db.replace_view, db.delete_view and db.rename_view.overwrite, return_old, return_new to various document management methods.Fixed a bug in Cursor.close. Now it properly returns None when the cursor result set is smaller than the batch_size or in transactions.
Cursor.close. Now it properly returns None when the cursor result set is smaller than the batch_size or in transactions.One column per quarter.
Removed the arbitrary default value of 100 for the limit parameter (now there is no threshold if it is not set) in following simple query methods:
limit parameter (now there is no threshold if it is not set) in following simple query methods:
Collection.allCollection.findCollection.find_nearCollection.find_in_boxCollection.find_in_rangeCollection.find_by_textAdded new parameters shard_like, sync_replication and enforce_replication_factor to method Database.create_collection.
shard_like, sync_replication and enforce_replication_factor to method Database.create_collection.Fixed import bug in setup.py and docs/conf.py.
prune tests in MANIFEST.in.Manage documents using IDs (more examples here):
Manage documents using IDs (more examples here):
col.get('foo/bar') # Get by document ID
col.get('bar') # Get by document key
col.get({'_id': 'foo/bar'}) # Get by document body with ID
col.get({'_key': 'bar'}) # Get by document body with key
col.update({'_id': 'foo/bar', 'val': 1}) # Update by document ID
col.update({'_key': 'bar', 'val': 1}) # Update by document key
col.replace({'_id': 'foo/bar', 'val': 2}) # Replace by document ID
col.replace({'_key': 'bar', 'val': 2}) # Replace by document key
col.delete('foo/bar') # Delete by document ID
col.delete('bar') # Delete by document key
col.delete({'_id': 'foo/bar'}) # Delete by document body with ID
col.delete({'_key': 'bar'}) # Delete by document body with key
Perform basic document operations directly from Database (more examples here):
db.insert_document('students', {'_key': 'dave'})
db.has_document('students/dave')
db.document('students/dave')
db.update_document({'_id': 'students/dave', 'val': 1})
db.replace_document({'_id': 'students/dave', 'val': 2})
db.delete_document('students/dave')
Manage vertices and edges directly from Graph (more examples here):
graph.insert_vertex('profs', {'_key': 'jon', 'name': 'Jon'})
graph.update_vertex({'_id': 'profs/jon', 'age': 35})
graph.replace_vertex({'_id': 'profs/jon', 'name': 'Jon', 'age':36})
graph.has_vertex('profs/jon')
graph.vertex('profs/jon')
graph.delete_vertex('profs/jon')
graph.insert_edge('teach', {'_id': 'teach/1', '_from': 'profs/jon', '_to': 'lectures/CS101'})
graph.replace_edge({'_id': 'teach/1', '_from': 'profs/jon', '_to': 'lectures/CS101'})
graph.update_edge({'_id': 'teach/1', 'online': True})
graph.has_edge('teach/1')
graph.edge('teach/1')
graph.delete_edge('teach/1')
graph.link('teach', 'profs/jon', 'lectures/CS101')
graph.edges('teach', 'profs/jon', direction='out')
Executing a transaction now returns TransactionJob objects, allowing result retrieval after commit (see examples, restrictions and caveats here):
with db.begin_transaction() as txn_db:
txn_col = txn_db.collection('students')
job1 = txn_col.insert({'_key': 'Abby'})
job2 = txn_col.insert({'_key': 'John'})
job3 = txn_col.insert({'_key': 'Mary'})
assert job1.result()['_id'] == 'students/Abby'
assert job2.result()['_id'] == 'students/John'
assert job3.result()['_id'] == 'students/Mary'
Added new methods to Cursor. Methods Cursor.pop and Cursor.fetch lets you control when new batches are fetched from server. See here for details.
Added new methods to AQL. See here for details.
Added new methods to Graph. See here for details.
Added new methods to EdgeCollection. See here for details.
Added new method Database.ping. See here for details.
Added support for Foxx. See here for details.
Improved error handling: the catch-all exception ArangoError now splits further into ArangoClientError and ArangoServerErrror, allowing you to differentiate errors coming from server vs. client. Server exceptions, furthermore, give you access to HTTP request response metadata (e.g. status code, payload, headers). See here for details.
Unfortunately, many updates in 4.0.0 are not backward compatible. If you are upgrading, you will need to change your code in several places (sorry for the inconvenience).
Some APIs were rather awkward and didn't make sense. For example, ArangoClient asks you for username and password before you specify the database. The initialization and the usage of ArangoClient were made simpler and more intuitive. See here for examples.
In previous versions of python-arango, attempt to abstract away ArangoDB's _system database did more harm than good. One example is the duplicated set of admin methods in ArangoClient and Database. These admin methods are now accessible from Database only, and you must connect to _system database explicitly. See here for examples.
Some method names and signatures were modified for consistency. This is less likely to break your code if you were using keyword arguments over positional ones. Some examples are document management methods such as update, replace and delete. You should carry out a comprehensive review of all methods used in your code with new API specification.
Some modules were moved and/or renamed. Imports other than from arango import ArangoClient and from arango.exceptions import * may not work anymore. Python-arango was designed such that the two imports are all you need for complete feature access.
Some classes were renamed (e.g. Database to StandardDatabase, Collection to StandardCollection). As long as you are not importing classes directly, this change alone should not break your code. Note that StandardDatabase and StandardCollection are still referred to as Database and Collection in this changelog.
Database.grant_user_access and Database.grant_revoke_access were removed. See here for details.user in method Database.databases (redundant).Database.sleep (not supported by ArangoDB anymore).Database.execute (not supported by ArangoDB anymore).names_only in methods Database.collections, Database.graphs and Database.users (redundant).Database.async to Database.begin_async_execution. While rest of the API for async execution remains more or less the same, underlying class structures were overhauled. See here for details.Database.batch to Database.begin_batch_execution. While rest of the API for batch execution remains more or less the same, underlying class structures were overhauled. See here for details.Database.transaction to Database.begin_transaction. While rest of the API for transactions remains more or less the same, underlying class structures were overhauled. See here for details.commit_on_error and method clear from batch execution and transactions.raise_errors in methods AsyncJob.result and BatchJob.result. Job exceptions are now always raised.check_rev parameters in document management methods default to True.Collection.unload now returns a boolean.Collection.load now returns a boolean.Collection.rename now returns a boolean.Collection.truncate now returns a boolean.Collection.checksum now returns a string.inclusive in method Collection.find_in_range. Now it is always inclusive on both ends.offset to skip in method Collection.find.offset to skip in method Collection.find_in_range.limit now defaults to 100 in methods Collection.find, Collection.find_near, Collection.find_in_range, Collection.find_in_box and Collection.find_by_text.Changed the signature of method Graph.create_edge_definition, and edge definitions in general (see here for details):
# old
{
'name': 'teach',
'from_collections': ['teachers'],
'to_collections': ['lectures']
}
# new
{
'edge_collection': 'teach',
'from_vertex_collections': ['teachers'],
'to_vertex_collections': ['lectures']
}
Removed method Graph.orphan_collections. Use Graph.edge_definitions instead.
arango.cursor.ExportCursor. All cursors are now instances of arango.cursor.Cursor.arango.exceptions.CollectionBadStatusError.arango.exceptions.ServerSleepError.arango.exceptions.UserAccessError.arango.exceptions.UserGrantAccessError.arango.exceptions.UserRevokeAccessError.arango.exceptions.ClusterTestError.arango.exceptions.GraphGetError.arango.exceptions.OrphanCollectionListError.arango.exceptions.TransactionError to arango.exceptions.TransactionExecuteError.ignore_missing parameters now default to False.Added missing license information in setup.py
Added new APIs for Pregel. Please refer to the documentation for more details.
Fixed a KeyError bug in BaseCollection.properties method.
BaseCollection.properties method.test_requires in setup.py.Added new parameter deduplicate to Collection.add_hash_index and Collection.add_skiplist_index methods.
deduplicate to Collection.add_hash_index and Collection.add_skiplist_index methods.Added support for ArangoDB version 3.2
smart, smart_field and shard_count to Database.create_graph method.drop_collections to Database.delete_graph method.Added new method arango.client.ArangoClient.asynchronous to replace the soon-to-be-deprecated method arango.client.ArangoClient.async (due to name con…
Duplicated several methods in arango.client.ArangoClient to arango.database.Database to allow non-root users access to the API operations (only root user could call them before). More information on the duplicated methods and their usage can be found in the following pages:
Added new method arango.client.ArangoClient.asynchronous to replace the soon-to-be-deprecated method arango.client.ArangoClient.async (due to name conflict with Python 3.7+ keyword async). The changes are reflected in http://python-driver-for-arangodb.readthedocs.io/en/master/async.html.
Improved the performance for large batch commits.
Collection.import_bulk with new parameters.Added parameter replication_factor to method Database.create_collection.
replication_factor to method Database.create_collection.…and therefore is a backwards compatibility breaking change).
Database.get_document to allow direct retrieval of documents via their IDs.Collection.all to use ArangoDB's built-in all simple query instead of the export API (this changes the method's signature and therefore is a backwards compatibility breaking change).Collection.export, which is equivalent to the old Collection.all method.Used the correct export cursor endpoint for Collection.all method.
Collection.all method.Added new method arango.client.ArangoClient.log_levels.
arango.client.ArangoClient.log_levels.arango.client.ArangoClient.set_log_levels.system to arango.database.Database.delete_collection`.Added new arguments check_cert and use_session to ArangoClient to allow more control over the default HTTP client using the requests library.
check_cert and use_session to ArangoClient to allow more control over the default HTTP client using the requests library.Changed the ArangoClient's default host to 127.0.0.1 from localhost.
ArangoClient's default host to 127.0.0.1 from localhost.Added new method user_access in arango.ArangoClient (please refer to the documentation for more details).
user_access in arango.ArangoClient (please refer to the documentation for more details).Added new methods async_jobs and clear_async_jobs in arango.ArangoClient (please refer to the documentation for more details).
async_jobs and clear_async_jobs in arango.ArangoClient (please refer to the documentation for more details).Added support for ArangoDB version 3.x.
Your coding agent can read these notes before it upgrades. Set up the MCP server →