Python
The Python client library is used to communicate with an Endb instance from a Python application.
Table of Contents
Install
pip install endb
pip install websockets # optional WebSocket support
pip install pyarrow # optional Apache Arrow support
Usage Examples
Import
from endb import (Endb, EndbWebSocket)
Endb
Use Endb to communicate with Endb over HTTP.
It accepts optional url, accept, username, and password parameters.
Accept headers default to LD-JSON and can be set to any valid
content type listed in the HTTP API.
If you have pyarrow installed, you can also use application/vnd.apache.arrow.file
and application/vnd.apache.arrow.stream.
e = Endb()
e = Endb('http://localhost:3803/sql')
e = Endb('http://localhost:3803/sql', 'text/csv')
e = Endb('http://localhost:3803/sql', 'application/json', 'zig', 'zag')
NOTE: Choosing accept headers other than LD-JSON will return
Python data structures symmetrical with those returned from
the respective accept header provided to the HTTP API.
text/csv returns comma-delimited strings, application/json
returns tuples as lists, and so on.
EndbWebSocket
Use the EndbWebSocket class to communicate with Endb over WebSockets.
It accepts optional url, username, and password parameters.
ews = EndbWebSocket()
ews = EndbWebSocket('ws://localhost:3803/sql', 'zig', 'zag')
sql()
The sql method is available to both Endb and EndbWebSocket.
It accepts q, and optional p, m, and accept parameters
and returns an list of strongly-typed documents.
(See Python API Reference.)
It is sychronous for Endb and asynchronous for EndbWebSocket.
To ignore the p or m parameters but still supply an accept header,
supply the default values or use a named (accept) parameter.
from datetime import date, datetime, timezone
e.sql("INSERT INTO USERS (date, name, email) VALUES (?, ?, ?);", [datetime.now(timezone.utc), 'Aaron', 'aaron@canadahealth.ca'])
e.sql("INSERT INTO USERS (name) VALUES (?);", [['Aaron'], ['Kurt'], ['Cindy']], True)
e.sql("SELECT * FROM users;", [], False, 'text/csv')
e.sql("SELECT * FROM users;", accept = 'text/csv')
e.sql("INSERT INTO USERS (name) VALUES (?);", [['Aaron'], ['Kurt'], ['Cindy']], True, 'text/csv')
Data Types
When an LD-JSON (default) accept header is used, strongly typed data is returned according to this mapping:
null-Nonexsd:date-datetime.datexsd:time-datetime.timexsd:dateTime-datetime.datetimexsd:base64Binary-bytes(frombase64)xsd:integer-int
For more information on Endb data types, see the Data Types doc.
Complete Examples
from endb import Endb
from datetime import date, datetime, timezone
e = Endb()
e.sql("INSERT INTO users {name: 'Yuvi'}")
e.sql("SELECT * FROM users;")
e2 = Endb('http://localhost:3803/sql', 'application/json', 'zig', 'zag')
e2.sql("INSERT INTO USERS (name) VALUES (?);", [['Aaron'], ['Kurt'], ['Cindy']], True, 'text/csv')
e2.sql("SELECT * FROM users;", [], False, 'application/json')
When the websockets dependency is installed, it is possible to
return asynchronous results to the Python interactive shell
directly if you start it with python3 -m asyncio:
from endb import EndbWebSocket
ews = EndbWebSocket()
await ews.sql("INSERT INTO users {name: 'Lydia'}")
ws_result = await ews.sql("SELECT * FROM users;")
print(ws_result)
ews2 = EndbWebSocket(username = 'zig', password = 'zag')
await ews2.sql("INSERT INTO USERS (name) VALUES (?);", [['Aaron'], ['Kurt'], ['Cindy']], True, 'text/csv')
ws_result = await ews2.sql("SELECT * FROM users;", [], False, 'application/json')
print(ws_result)
Python API Reference
NOTE: The following API documentation is generated from source code docstrings in the
endb repository.
endb module
class endb.Endb(url='http://localhost:3803/sql', accept='application/ld+json', username=None, password=None)
Bases: AbstractEndb
An Endatabas client for the HTTP API
url
HTTP URL of an Endatabas instance
- Type: str
accept
Accept header content type
- Type: str
username
Username for HTTP Basic Auth
- Type: str
password
Password for HTTP Basic Auth
- Type: str
sql(q, p=[], m=False, accept=None)
Executes a SQL statement
The SQL statement is sent to Endb.url over HTTP.
- Parameters:
- q (str) – SQL statement or query to execute
- p (array_like , default= [ ]) – Positional or named SQL parameters (or an array of either, if using many parameters)
- m (bool , default=False) – Many parameters flag
- accept (str , optional) – Accept header content type (defaults to Endb.accept)
- Raises: TypeError – Internal error if attempting to translate an unknown type to LD-JSON.
class endb.EndbWebSocket(url='ws://localhost:3803/sql', username=None, password=None)
Bases: AbstractEndb
An Endatabas client for the HTTP API
url
HTTP URL of an Endatabas instance
- Type: str
username
Username for HTTP Basic Auth
- Type: str
password
Password for HTTP Basic Auth
- Type: str
async close()
Closes the WebSocket connection
async sql(q, p=[], m=False, accept=None)
Executes a SQL statement
The SQL statement is sent to Endb.url over WebSockets.
- Parameters:
- q (str) – SQL statement or query to execute
- p (array_like , default= [ ]) – Positional or named SQL parameters (or an array of either, if using many parameters)
- m (bool , default=False) – Many parameters flag
- accept (str , optional) – Ignored. WebSocket communication is always in LD-JSON.
- Raises:
- AssertionError – If ‘id’ of request and response do not match.
- RuntimeError – If response from server contains an error.