https://github.com/surister/cratedb-async
asynchronous http driver for CrateDB
https://github.com/surister/cratedb-async
async connector cratedb database driver http httpx sql trio
Last synced: about 1 month ago
JSON representation
asynchronous http driver for CrateDB
- Host: GitHub
- URL: https://github.com/surister/cratedb-async
- Owner: surister
- License: mit
- Created: 2025-01-17T09:59:04.000Z (9 months ago)
- Default Branch: master
- Last Pushed: 2025-08-17T11:08:10.000Z (about 2 months ago)
- Last Synced: 2025-08-17T13:08:09.487Z (about 2 months ago)
- Topics: async, connector, cratedb, database, driver, http, httpx, sql, trio
- Language: Python
- Homepage:
- Size: 169 KB
- Stars: 1
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE.md
Awesome Lists containing this project
README
# CrateDB Async driver based on httpx.




[](https://github.com/surister/cratedb-async/actions/workflows/python-publish.yml)Asynchronous driver for CrateDB, it uses the HTTP protocol and follows its own design.
## Usage
It can be used with any async library:
#### Asyncio
```pythonimport asyncio
from cratedb_async.client import CrateClient
async def main():
crate = CrateClient('http://192.168.88.251:4200')
response = await crate.query('SELECT * FROM sys.summits')
print(response.as_table())asyncio.run(main())
# +----------------+---------------------+---------+--------------+--------+----------------+------------+---------------+----------------------+
# | classification | coordinates | country | first_ascent | height | mountain | prominence | range | region |
# +----------------+---------------------+---------+--------------+--------+----------------+------------+---------------+----------------------+
# | I/B-07.V-B | [6.86444, 45.8325] | FR/IT | 1786 | 4808 | Mont Blanc | 4695 | U-Savoy/Aosta | Mont Blanc massif |
# | I/B-09.III-A | [7.86694, 45.93694] | CH | 1855 | 4634 | Monte Rosa | 2165 | Valais | Monte Rosa Alps |
# | I/B-09.V-A | [7.85889, 46.09389] | CH | 1858 | 4545 | Dom | 1046 | Valais | Mischabel |
# | I/B-09.III-A | [7.83556, 45.92222] | CH/IT | 1861 | 4527 | Liskamm | 376 | Valais/Aosta | Monte Rosa Alps |
# | I/B-09.II-D | [7.71583, 46.10139] | CH | 1861 | 4506 | Weisshorn | 1235 | Valais | Weisshorn-Matterhorn |
# | I/B-09.II-A | [7.65861, 45.97639] | CH/IT | 1865 | 4478 | Matterhorn | 1042 | Valais/Aosta | Weisshorn-Matterhorn |
# | I/B-09.II-C | [7.61194, 46.03417] | CH | 1862 | 4357 | Dent Blanche | 915 | Valais | Weisshorn-Matterhorn |
# | I/B-09.I-B | [7.29917, 45.9375] | CH | 1859 | 4314 | Grand Combin | 1517 | Valais | Grand Combin Alps |
# | I/B-12.II-A | [8.12611, 46.53722] | CH | 1829 | 4274 | Finsteraarhorn | 2280 | Bern/Valais | Bernese Alps |
# | I/B-09.II-D | [7.69028, 46.065] | CH | 1864 | 4221 | Zinalrothorn | 490 | Valais | Weisshorn-Matterhorn |
# +----------------+---------------------+---------+--------------+--------+----------------+------------+---------------+----------------------+
```#### Trio
```python
import triofrom cratedb_async.client import CrateClient
async def main():
crate = CrateClient('http://192.168.88.251:4200')
response = await crate.query('SELECT * FROM sys.summits')
print(response.as_table())trio.run(main)
# +----------------+---------------------+---------+--------------+--------+----------------+------------+---------------+----------------------+
# | classification | coordinates | country | first_ascent | height | mountain | prominence | range | region |
# +----------------+---------------------+---------+--------------+--------+----------------+------------+---------------+----------------------+
# | I/B-07.V-B | [6.86444, 45.8325] | FR/IT | 1786 | 4808 | Mont Blanc | 4695 | U-Savoy/Aosta | Mont Blanc massif |
# | I/B-09.III-A | [7.86694, 45.93694] | CH | 1855 | 4634 | Monte Rosa | 2165 | Valais | Monte Rosa Alps |
# | I/B-09.V-A | [7.85889, 46.09389] | CH | 1858 | 4545 | Dom | 1046 | Valais | Mischabel |
# | I/B-09.III-A | [7.83556, 45.92222] | CH/IT | 1861 | 4527 | Liskamm | 376 | Valais/Aosta | Monte Rosa Alps |
# | I/B-09.II-D | [7.71583, 46.10139] | CH | 1861 | 4506 | Weisshorn | 1235 | Valais | Weisshorn-Matterhorn |
# | I/B-09.II-A | [7.65861, 45.97639] | CH/IT | 1865 | 4478 | Matterhorn | 1042 | Valais/Aosta | Weisshorn-Matterhorn |
# | I/B-09.II-C | [7.61194, 46.03417] | CH | 1862 | 4357 | Dent Blanche | 915 | Valais | Weisshorn-Matterhorn |
# | I/B-09.I-B | [7.29917, 45.9375] | CH | 1859 | 4314 | Grand Combin | 1517 | Valais | Grand Combin Alps |
# | I/B-12.II-A | [8.12611, 46.53722] | CH | 1829 | 4274 | Finsteraarhorn | 2280 | Bern/Valais | Bernese Alps |
# | I/B-09.II-D | [7.69028, 46.065] | CH | 1864 | 4221 | Zinalrothorn | 490 | Valais | Weisshorn-Matterhorn |
# +----------------+---------------------+---------+--------------+--------+----------------+------------+---------------+----------------------+```
#### Bulk insert
```python
import asynciofrom cratedb_async.client import CrateClient
async def main():
crate = CrateClient('http://192.168.88.251:4200')
rows = [
('one', 2, ['three', ]),
('three', 4, ['five', ])
]
table_name = 'my_tbl'
create_table_resp = await crate.query(f'create table {table_name} (one text, two integer, three array(TEXT))')
print(create_table_resp)
# SQLResponse(error=None, columns=[], row_count=1, duration=177.55101)response = await crate.bulk_insert(table_name, rows)
print(response)
# SQLResponse(error=None, columns=[], row_count=0, duration=6.341763)await crate.query(f'refresh table {table_name}')
select_response = await crate.query(f'select * from {table_name}')
print(select_response.as_table())
# SQLResponse(error=None, columns=[], row_count=1, duration=8.724443)asyncio.run(main())
```## Style guide
This project uses Google Python Style guide with minor tweaks, enforced by pyling, read more in
* Google documentation: https://google.github.io/styleguide/pyguide.html
* Docstring documentation: https://sphinxcontrib-napoleon.readthedocs.io/en/latest/example_google.html### Tweaks
* Max line is 100
* Indentation is four spaces.