DBDelve
Dive deep into your data. A fast, native, multi-engine database client written in Rust. Free and open source, no telemetry.
翻译准备中
尚未检测到更新。GitHub 发布版本后会显示在这里。
个人 GitHub 账号下公开仓库的所有者可以登录并验证所有权,自行管理介绍,无需管理员批准。
登录并生成验证文件,在 30 分钟内将其提交到此仓库的默认分支。其他分支或分叉仓库中的文件无效。然后在下方检查文件,即可无需管理员批准直接管理项目。请保留文件以维持管理权限。
如需登录,将前往登录页面。登录后请回到此处,再次点击所选的验证按钮。
在项目文件夹中运行 /nomorevibe verify,即可验证所有权并自行管理介绍。
一分钟完成验证制作者的介绍仅有上面的一句话。 更多详情请阅读仓库 README。 仓库 README ↗
正在加载完整 README。
查看完整 README ↗:Info: Check Github <https://github.com/AitoDotAI/aito-python-tools>_ for the latest source code and documentation <https://aito-python-sdk.readthedocs.io/en/latest/>__ for more information.
:Maintainer: Aito [email protected]
|PyPI| |PyPI version|
The Aito Python SDK is an open-source library that helps you to integrate your Python application
to Aito <https://aito.ai/>_ quicker and more efficiently.
The SDK also includes the Aito Command Line Interface (CLI) <https://aito-python-sdk.readthedocs.io/en/latest/cli.html>_ that enables you to interact with Aito
using commands in your command-line shell, e.g: infer a table schema from a file or upload a file to Aito.
Each Aito API version has its own package, whose meaning never changes:
.. code-block:: python
from aito.v2 import Client # the v2 API (`from aito.v1 import Client` for v1)
# the public read-only sandbox; use your own instance URL and key in production
client = Client('https://shared.aito.ai/db/aito-demo',
'yg4rTlXkqDzm4y8gPeY75HCKaNwfbTQ2si64ONTi', env='v2')
prediction = client.predict(
from_table='invoices', where={'Description': 'cloud services'}, predict='GLCode')
print(prediction.first.value, prediction.first.probability) # E002 0.83...
aito.Client is the default version, and moves only on a major release of this package:
since aitoai 1.0 it is the v2 client (0.x: v1). Quickstarts can use it; production code
should import the version it means, aito.v1 or aito.v2, so an upgrade cannot change
the API underneath it. To stay on v1: from aito.v1 import Client, or pin aitoai<1.
The pre-0.7 paths (aito.client, aito.client.v2, aito.api) were removed in 1.0;
importing one raises an ImportError naming its replacement. The command-line tool still
talks to the v1 API in 1.x: v2 support arrives as an opt-in in a 1.x minor release, and the
CLI's default moves to v2 only in 2.0. The design is written up in
docs/versioned-namespaces.md.
pip install aitoai installs the API clients. The command-line tool, schema inference
and file conversion need the dataframe toolchain: pip install 'aitoai[cli]'.
A v2 error is an AitoV2Error with the server's code and status_code; branch on
those, not on the message. is_not_found is a missing table or collection.
The client repeats a request only when that is safe, waiting the server's Retry-After
plus jitter:
write.contention: a write that lost to concurrent writes on the same table and
committed nothing. Up to 3 retries (write_contention_retries=; 0 turns it off). Other
409s are never repeated.rate_limit_retries=; 0 turns it off).It does not repeat a job's status or result (a stored result does not change: submit the job
again), or a 503: a write answered 503 may or may not have been applied, so read before
repeating it. With the retries off, or after the last one, err.is_retryable says whether
repeating the same request later is safe:
.. code-block:: python
from aito.v2 import Client, AitoV2Error
client = Client(url, key, rate_limit_retries=0) # this caller queues its own retries
try:
prediction = client.predict(from_table='invoices', where=invoice, predict='GLCode')
except AitoV2Error as err:
if not err.is_retryable:
raise
queue_for_later(invoice)
Transient failures (a 502, 503 or 504, a dropped connection, a timeout) are retried only if you
opt in, and only for requests that change nothing: reads, queries and optimize, never a
write: a batch insert sent twice stores its rows twice. The exception is an upsert into a
collection with a primary key, create_collection(name, columns, primary_key='id') and then
upload_entries(name, rows, on_conflict='update'): it lands once however often it's sent,
so it's retried too. Client(url, key, retries=3, backoff=0.5) waits up to backoff * 2**n seconds before retry n. The default is
retries=0. What each client does on each failure, and how to resume a failed upload:
docs/client-resilience.md.
With Docker installed, aito start runs a local Aito and stores its keys, so the client
needs no arguments:
.. code-block:: console
$ pip install aitoai
$ aito start # pulls a pinned image, listens on http://127.0.0.1:9005, prints the keys
$ python -c "import aito; print(aito.Client().get_schema())"
aito stop stops it (data and keys are kept), aito status checks it, aito keys
prints the keys again (--rotate replaces them), aito logs shows its log and
aito upgrade moves to the engine version this package pins. These work without the
[cli] extra. From Python, aito.Client() with no arguments uses AITO_URL and
AITO_API_KEY if set, else the local server's profile.
examples/v2_quickstart.py is a runnable end-to-end example that creates a collection,
loads it, predicts, explains, evaluates and drops it again.
pip install 'aitoai[mcp]' (Python 3.10+) adds aito-mcp, an MCP server for coding
agents and assistants. Its tools are predict, recommend, relate, match, search, query,
evaluate and schema/upload. Each tool's description says when Aito fits and when another
tool (a language model, a trained model, a search engine) is the better choice. Results
carry $p and a flattened $why. The server finds the instance the same way as
aito.Client(). It is read-only unless started with AITO_MCP_ALLOW_WRITES=1.
.. code-block:: console
$ claude mcp add aito -- aito-mcp # Claude Code; any MCP client runs `aito-mcp` over stdio
Setup for Claude Code and other assistants: Use Aito from Claude Code and other AI assistants <https://aito.ai/docs/articles/use-aito-from-claude-code-and-other-ai-assistants/>. When Aito
fits and when not: When to use Aito, and when not <https://aito.ai/docs/articles/when-to-use-aito-and-when-not/>.
claude-plugin/ is a Claude Code plugin with this server and a skill,
add-predictive-feature. The skill walks an agent through a fit check, a schema from
an existing table, a first prediction, a threshold chosen with _evaluate, and
act / assist / abstain wiring.
For issues with, questions about, or feedback, please join our support channels <https://aito.ai/join-slack/>__.
Aito Python SDK can be installed with pip <http://pypi.python.org/pypi/pip>_
.. code-block:: console
$ pip install aitoai
Check our installation guide <https://aito-python-sdk.readthedocs.io/en/latest/install.html>_ for more information
You will need sphinx <https://www.sphinx-doc.org/en/master/>_ installed to generate the documentation.
$ pip install sphinx
$ pip install sphinx_rtd_theme
Documentation can be generated by:
.. code-block:: console
$ cd docs
$ make clean html
Generated documentation can be found in the docs/build/html/* directory.
The Python SDK SQL integration and the tests depend on the ODBC db drivers and the postgres and mysql functionality.
The main drivers can be installed in Debian based Linuxes with:
sudo apt install unixodbc-dev odbc-postgresql postgresql-client default-mysql-client
pip install pyodbc
You can find more information about installing the MySQL ODBC drivers here
Also note: that the database integration tests require local postgres / mySQL servers.
To run the test, you need to have the following environment variables defined:
Install the required packages:
.. code-block:: console
$ pip install -r requirements/build.txt
$ pip install -r requirements/test.txt
You can use our test cli to run tests:
.. code-block:: console
$ python -m tests -h
.. note::
Some tests require some environment variables to be setup. Use the test CLI list command to discover and display the test suites and cases
The live tests run against a local Aito loaded with a fixture they own
(tests/fixtures/grocery), as CI does. Run one with your own test keys, load the fixture,
and point the variables at it:
.. code-block:: console
$ docker run -d -p 127.0.0.1:9005:9005 -e READ_WRITE_APIKEY=<rw-test-key> -e APIKEY=<ro-test-key> \
ghcr.io/aitohq/aito:v2.12.0
$ export AITO_INSTANCE_URL=http://localhost:9005 AITO_API_KEY=<rw-test-key>
$ export AITO_GROCERY_DEMO_INSTANCE_URL=$AITO_INSTANCE_URL AITO_GROCERY_DEMO_API_KEY=<rw-test-key>
$ python tests/fixtures/grocery/seed.py
The seed replaces the database's schema, so it refuses any host but localhost. A local engine
has no S3, so the file-upload tests take the batch fallback there; the S3 path itself runs
against a cloud instance in CI's release-branch smoke. AITO_SKIP_LIVE_TESTS=1 skips the live tests when no instance is set,
as the Windows CI job does.
There are multiple test suites:
.. code-block:: console
$ python -m tests -v suite cli
.. note::
You need an Aito instance and set up the credentials with ```AITO_INSTANCE_URL``` and ```AITO_API_KEY``` to test some functions.
2. SDK suite:
.. code-block:: console
$ python -m tests -v suite sdk
.. note::
You need an Aito instance and set up the credentials with ```AITO_INSTANCE_URL``` and ```AITO_API_KEY``` to test some functions
3. SQL functions tests:
Test against Postgres:
.. code-block:: console
$ python -m tests -v case sql_functions.test_connection.TestPostgresConnection
$ python -m tests -v case sql_functions.test_cli_sql_functions.TestPostgresFunctions
Test against MySQL:
.. code-block:: console
$ python -m tests -v case sql_functions.test_connection.TestMySQLConnection $ python -m tests -v case sql_functions.test_cli_sql_functions.TestMySQLFunctions
.. note::
To test the SQL functions, you need to install `pyodbc <https://pypi.org/project/pyodbc/>`_ and the specific database ODBC driver.
4. Build and test built package:
To build the package:
.. code-block:: console
$ pip install -r requirements/deploy.txt
$ ./scripts/deploy test.pypi --no-publish -b dev
WARNING: This will update the version in 'aito/init' file. DO NOT commit this to Git!
The built wheel should be at dist/. To install:
.. code-block:: console
$ pip install dist/aitoai-<version>.whl
To test the built package, create an environment variable TEST_BUILT_PACKAGE and run the above tests
To test the inline documentation:
.. code-block:: console
$ python -m tests -v suite inline_docs
To test the code blocks in rst files:
.. code-block:: console
$ cd docs $ curl -o reddit_sample.csv https://raw.githubusercontent.com/AitoDotAI/kickstart/master/reddit_sample.csv $ export SPHINX_DISABLE_MOCK_REQUIREMENTS=TRUE $ make doctest
tests/sdk/test_aito_schema.py) or create a new test suite inside the tests foldertests/inline_docs/test_client_inline_docs.py).. note::
Remember to update the autodoc_mock_imports in conf.py file if there are additional requirements
.. |PyPI| image:: https://img.shields.io/pypi/v/aitoai?style=plastic :target: https://pypi.org/project/aitoai/ .. |PyPI version| image:: https://img.shields.io/pypi/pyversions/aitoai?style=plastic :target: https://github.com/AitoDotAI/aito-python-tools