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
-None
xsd:date
-datetime.date
xsd:time
-datetime.time
xsd:dateTime
-datetime.datetime
xsd: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.