Skip to main content

askmydb

A Python package for querying databases using natural language.

Overview

askmydb allows you to interact with your databases by asking questions in natural language. It leverages large language models (LLMs) to convert your queries into SQL and execute them on the specified database.

Features

  • Query databases using natural language prompts.
  • Supports multiple LLM providers (e.g. OpenAI, Ollama, etc).
  • Works with SQLite and other databases supported by SQLAlchemy.
  • Easy to set up and use.
  • Retrieve database schema in both JSON and human-readable text formats.

Installation

Install the package and its dependencies using pip:

pip install askmydb

The package requires the following dependencies:

  • openai
  • ollama
  • sqlalchemy

You can install these dependencies individually if needed:

pip install openai ollama sqlalchemy

Usage

Below are examples of how to use askmydb with different LLM providers.

Using OllamaProvider

from askmydb import AskMyDB
from askmydb.llm.ollama_provider import OllamaProvider

if __name__ == "__main__":
    llm = OllamaProvider(base_url="http://localhost:32768", model="qwen2.5:1.5b")
    askDb = AskMyDB(db_url="sqlite:///IMDB.db", llm=llm)
    query, result = askDb.ask("get the movies on action genre with rating more than 5 sort it high to low")
    print(result)

Using OpenAIProvider (via OpenRouter)

from askmydb import AskMyDB
from askmydb.llm.openai_provider import OpenAIProvider

if __name__ == "__main__":
    llm = OpenAIProvider(api_key="your_api_key_here", base_url="https://openrouter.ai/api/v1", model="meta-llama/llama-4-maverick:free")
    askDb = AskMyDB(db_url="sqlite:///IMDB.db", llm=llm)
    query, result = askDb.ask("get the movies on action genre with rating more than 5 sort it high to low")
    print(query, result)

Retrieving Database Schema

askmydb allows you to retrieve the database schema in two formats: JSON and human-readable text. This can be useful for understanding the structure of your database programmatically or for display purposes.

You can use the following methods of the AskMyDB class:

  • get_schema_json(): Returns the schema as a JSON-like dictionary.
  • get_schema_text(): Returns the schema as a formatted string for human readability.

Example

from askmydb import AskMyDB
from askmydb.llm.openai_provider import OpenAIProvider

if __name__ == "__main__":
    llm = OpenAIProvider(api_key="your_api_key_here", base_url="https://openrouter.ai/api/v1", model="meta-llama/llama-4-maverick:free")
    askDb = AskMyDB(db_url="sqlite:///IMDB.db", llm=llm)

    # Get schema in JSON format
    schema_json = askDb.get_schema_json()
    print("Schema (JSON):", schema_json)

    # Get schema in text format
    schema_text = askDb.get_schema_text()
    print("Schema (Text):", schema_text)

License

This project is licensed under the MIT License.

Author and Repository

Author: Shanthosh
Email: shanthubolt@gmail.com
Repository: https://github.com/Msalways/Ask-My-DB

Custom LLM Provider Example

You can create your own custom LLM provider by subclassing LLMProvider. Below is an example implementation of a CustomProvider:

from askmydb.llm.base import LLMProvider
from askmydb.llm.sql_prompt import build_sql_prompt, build_system_prompt

class CustomProvider(LLMProvider):
    def __init__(self, base_url, model, temperature):
        self.base_url = base_url
        self.model = model
        self.temperature = temperature

    def generate_sql(self, prompt: str, schema: str) -> str:
        system_prompt = build_system_prompt()
        full_prompt = build_sql_prompt(prompt, schema)
        # Implement your custom logic here to generate the SQL query using your LLM
        query = None
        return query

Using CustomProvider

from askmydb import AskMyDB
from my_custom_provider import CustomProvider

if __name__ == "__main__":
    llm = CustomProvider(base_url="your_base_url", model="your_model", temperature=0.7)
    askDb = AskMyDB(db_url="sqlite:///IMDB.db", llm=llm)
    query, result = askDb.ask("get the movies on action genre with rating more than 5 sort it high to low")
    print(query, result)

Metadata

Release files for askmydb 0.1.6

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for askmydb 0.1.6
File Size Uploaded
askmydb-0.1.6.tar.gz 8.9 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for askmydb 0.1.6
File Interpreter ABI Platform
askmydb-0.1.6-py3-none-any.whl Python 3 none any Details

Total release size: 20.1 kB

Release files / askmydb-0.1.6.tar.gz

Download URL askmydb-0.1.6.tar.gz
Size 8.9 kB
Tags Source
SHA-256 checksum
How to use checksums
6241113ffb8b9f22b69064ed92775ad914d63be4ef302859987c37e52e080c35
BLAKE2b-256 checksum
How to use checksums
16591f73b8bcc0d8fdd5c0f3cd47e0116a757f8e5c47676a41781eab365c24de
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.1.0 CPython/3.10.17

Release files / askmydb-0.1.6-py3-none-any.whl

Download URL askmydb-0.1.6-py3-none-any.whl
Size 11.2 kB
Tags Python 3
SHA-256 checksum
How to use checksums
708e8dd9a974f8d389e0bb4ec5ac1d8c6edc1f6c63bc975a38aac8ad18868592
BLAKE2b-256 checksum
How to use checksums
107ac0de36030b6b124a6a4f3e500639550d8b09f31f5cd809a382f6d104ffe3
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.1.0 CPython/3.10.17

Release history Release notifications | RSS feed

This release

0.1.6 This release

2 release files

0.1.5

2 release files

0.1.4

2 release files

0.1.3

2 release files

0.1.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page