AyraDB python client
Project description
Python AyraDB client library
This module provides a simple interface to perform actions on an AyraDB installation.
Initialization
The AyraDB class is the main interface to an AyraDB installation.
In order to instantiate an AyraDB object, a valid host must be provided.
from ayradb import AyraDB
db: AyraDB = AyraDB(ip="192.168.0.1")
All possible operations a user can perform are described below.
Create a table
AyraDB allows users to create three different types of tables:
- FIXED_LENGTH,
- PADDED,
- NOSQL
Fixed lenght tables
For fixed_length tables, maximum key column size, maximum table size, and at least one field must be provided. New fields can be added later.
from ayradb import Table, Column
table = db.table("new_fixed_length_table")
fields = [{Column.NAME: "field0", Column.MAX_LENGTH: 1024},
{Column.NAME: "field1", Column.MAX_LENGTH: 1024},
{Column.NAME: "field2", Column.MAX_LENGTH: 1024}]
max_key_column_size_byte = 1024
rct = table.create(Table.TYPE_FIXED_LENGTH, columns=fields, key_max_size=max_key_column_size_byte).wait_response()
if rct.success is True:
print("New fixed length table created!")
else:
print(f"Error code: {rct.error_code}")
Padded
For padded tables, at least one field must be provided, and new fields can be added later.
from ayradb import Table, Column
table = db.table("new_padded_table")
fields = [{Column.NAME: "field0"},
{Column.NAME: "field1"},
{Column.NAME: "field2"}]
max_key_column_size_byte = 1024
rct = table.create(Table.TYPE_PADDED, columns=fields, key_max_size=max_key_column_size_byte).wait_response()
if rct.success is True:
print("New padded table created!")
else:
print(f"Error code: {rct.error_code}")
Nosql
Nosql tables do not have a fixed structure, so the fields argument is omitted.
from ayradb import Table, Column
table = db.table("new_nosql_table")
rct = table.create(Table.TYPE_NOSQL).wait_response()
if rct.success is True:
print("New nosql table created!")
else:
print(f"Error code: {rct.error_code}")
Insert a record
If the new record is not already contained in table, then it is inserted, otherwise it is updated.
table = db.table("new_fixed_length_table")
key_value = 'key_column'
fields = {
"field0": b'value0',
"field1": b'value1',
"field2": b'value2',
}
ri = table.upsert_record(key_value, fields).wait_response()
if ri.success is True:
print("New record inserted!")
else:
print(f"Error code: {ri.error_code}")
The fields argument must be specified, and the field value argument must be in the form of a byte Array.
Read a record
Read can be limited to a subset of fields with the fields argument.
table = db.table("new_fixed_length_table")
key_value = "key_column"
field_names = ["field0", "field2"]
rr = table.read_record(key_value, fields=field_names).wait_response()
if rr.success is True:
for key, value in rr.content.items():
print("Field name: " + key)
print("Field value: " + value.decode())
else:
print(f"Error code: {rr.error_code}")
If the fields argument is set to null, all fields are retrieved.
table = db.table("new_fixed_length_table")
key_value = "key_column"
rr = table.read_record(key_value, fields=[]).wait_response()
if rr.success is True:
for key, value in rr.content.items():
print("Field name: " + key)
print("Field value: " + value.decode())
else:
print(f"Error code: {rr.error_code}")
Delete a record
table = db.table("new_fixed_length_table")
key_value = "key_column"
rd = table.delete_record(key_value).wait_response()
if rd.success is True:
print("Record successfully deleted!")
else:
print(f"Error code: {rd.error_code}")
Deletion in Nosql tables can be limited to a subset of fields with the fields argument.
table = db.table("new_nosql_table")
key_value = "key_column_ns"
field_names = ["field0ns", "field1ns"]
rd = table.delete_record(key_value, fields=field_names).wait_response()
if rd.success is True:
print("Record fields successfully deleted!")
else:
print(f"Error code: {rd.error_code}")
The operation completes even if a record with the provided key does not exist in the table.
Retrieve table structure
Retrieve table structure retrieves the structures of the record of a table.
table = db.table("new_fixed_length_table")
rts = table.get_structure().wait_response()
if rts.success is True:
for i in range(len(rts.structure)):
field = rts.structure[i]
print(f"Position: {i}, Field name: {field.get('column_label')}, Field max length: {int(field.get('column_max_net_length',-1))} bytes")
else:
print(f"Error code: {rts.error_code}")
Truncate a table
Truncate table deletes all the records of an existing table, leaving the structure of the table intact and usable.
table = db.table("new_fixed_length_table")
rt = table.truncate().wait_response()
if rt.success is True:
print("Table is now empty!")
else:
print(f"Error code: {rt.error_code}")
Delete a table
Delete table destroys an existing table.
table = db.table("new_fixed_length_table")
rd = table.drop().wait_response()
if rd.success is True:
print("Table destroyed!")
else:
print(f"Error code: {rd.error_code}")
SQL queries
AyraDB provides an API to perform SQL-like queries on a single table. AyraDB SQL queries can contain the following clauses:
- WHERE
- GROUP_BY
- HAVING
- ORDER_BY
- LIMIT
- DISTINCT
IMPORTANT: the semicolon (';') at the end of the query is mandatory.
query = db.query('SELECT * FROM %s WHERE field="condition";', % table_name)
stream = query.execute().stream
while not stream.is_closed():
responses = stream.take_when_available()
for response in responses:
for record in response.content:
# Store or use the record
Connection handling
When all operations are completed, it's best practice to close the connection with the following command.
db.close_connection()
No operations are allowed after connection is closed. A "No Connection Error" (error code: 99) is returned when an action fails because of a broken connection. In such event a new AyraDB object must be referenced (see: Initialization) before performing a new action.
Error handling
When an action fails, a response object is returned to the user. Success will return false in case of a failure.
The response object contains an error code.
A list of all possible errors, divided by action, is provided below.
Error 99: No Connection Error
Error 100: Internal Error
Create a table
Error -1: Field max lenght required
Error -2: Key max lenght required
Error -3: Not enough nodes provided
Error 1: Table already exists
Insert a record
Error -1: Invalid field name
Error 1: Table not found
Error 2: Field not found
Error 3: Field too long
Read a record
Error -1: Invalid field name
Error 1: Table not found
Error 2: Record not found
Delete a record
Error -1: Invalid field name
Error 1: Table not found
Error 2: Field not found
Retrieve table structure
Error -1: Invalid field name
Error 1: Table not found
Truncate a table
Error 1: Table not found
Delete a table
Error -1: Invalid field name
Error 1: Table not found
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.