A Python package for querying databases using natural language.
Project description
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., dummy, OpenAI, Ollama).
- Works with SQLite and other databases supported by SQLAlchemy.
- Easy to set up and use.
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)
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 = askMyDB.ask("get the movies on action genre with rating more than 5 sort it high to low")
print(query, result)
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file askmydb-0.1.4.tar.gz.
File metadata
- Download URL: askmydb-0.1.4.tar.gz
- Upload date:
- Size: 7.9 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.10.17
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
d5e574c9215760e9f4353d31508a563ca708263b56cd7c3e96bdeb53c5e3101c
|
|
| MD5 |
f8bec6e4562fac8d4ec92037fd2f6943
|
|
| BLAKE2b-256 |
4817fadd29ed79425ec3c334dd715d8105f7ff9368f9d946409132bc944da79d
|
File details
Details for the file askmydb-0.1.4-py3-none-any.whl.
File metadata
- Download URL: askmydb-0.1.4-py3-none-any.whl
- Upload date:
- Size: 10.6 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.10.17
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
69d81014eea6fe890f6a305f99061943062f5d91691ee2172e166645840902dd
|
|
| MD5 |
e88d157dc0f076ef2f8061e378a6ba6b
|
|
| BLAKE2b-256 |
688c218c164e3000bf6d5cfcfe5e7dbc9d13c4bb07d6669be31062d32ff99c4b
|