Skip to main content

Generate PostgreSQL queries from natural language using AI

Project description

🔍 PSQL Query Builder

Transform natural language into optimized PostgreSQL queries with AI

PyPI version Python Versions License: MIT Downloads

✨ Overview

PSQL Query Builder is a powerful Python tool that transforms natural language into optimized PostgreSQL queries using AI. It bridges the gap between human language and SQL, making database interaction accessible to everyone - not just SQL experts.

Built on OpenAI's advanced language models, this tool analyzes your database schema and generates precise, efficient SQL queries based on plain English descriptions. Whether you're a data analyst without SQL expertise, a developer looking to speed up query writing, or a database administrator seeking to simplify access for your team, PSQL Query Builder streamlines your workflow.

✅ Features

🤖 AI-Powered SQL Generation

  • Transform natural language to optimized SQL
  • Context-aware query generation
  • Support for complex queries and joins

⚡ Smart Schema Caching

  • Automatic database schema analysis
  • Configurable cache TTL
  • Significant performance improvement

🛠️ Flexible Configuration

  • Environment variables support
  • Command-line arguments
  • Multiple output formats (table, JSON, CSV)

🔧 Intelligent Error Handling

  • Automatic fix suggestions
  • Detailed error messages
  • Interactive query correction

🎯 Use Cases

📊 Data Analysts

Generate complex SQL queries without deep SQL knowledge

Quickly explore database structures and relationships

Prototype queries in natural language before refinement

👨‍💻 Developers

Speed up database query development

Reduce time spent debugging complex SQL syntax

Generate queries for unfamiliar database schemas

🛡️ Database Admins

Provide simplified access to non-technical team members

Quickly generate queries for common reporting needs

Validate schema design through natural language

🚀 Quick Start

Installation

pip install psql-query-builder

Basic Usage

# Using environment variables for connection
export PSQL_CONNECTION_STRING="postgresql://username:password@localhost:5432/database"
export OPENAI_API_KEY="your-openai-api-key"

# Run a query
psql-query-builder --query "Find all active users who registered last month"

Python API

from psql_query_builder import QueryBuilder

# Initialize the query builder
builder = QueryBuilder(
    connection_string="postgresql://username:password@localhost:5432/database",
    openai_api_key="your-openai-api-key"
)

# Generate and execute a query
results = builder.run_query(
    "Find all products with more than 100 units in stock and price less than $50",
    execute=True
)

# Print the results
print(results)

LangChain Integration

PSQL Query Builder can be easily integrated with LangChain to enable natural language database queries in your AI applications:

# Using the @tool decorator approach
from langchain_core.tools import tool

@tool
def query_database(query: str, connection_string: str = "postgresql://user:pass@localhost/db"):
    """Execute a natural language query against a PostgreSQL database."""
    from psql_query_builder import QueryBuilder
    
    builder = QueryBuilder(connection_string=connection_string)
    return builder.run_query(query, execute=True)

# Use with LangChain
from langchain_openai import ChatOpenAI
from langchain.agents import create_openai_tools_agent, AgentExecutor

llm = ChatOpenAI(model="gpt-4-turbo")
tools = [query_database]
agent = create_openai_tools_agent(llm, tools, prompt=None)
agent_executor = AgentExecutor(agent=agent, tools=tools)

# Run the agent
response = agent_executor.invoke({"input": "Find all users who registered last month"})
print(response["output"])

For more advanced integration options, see the full documentation.

⚙️ Configuration

Environment Variables
# Full connection string
export PSQL_CONNECTION_STRING="postgresql://username:password@localhost:5432/database"

# Or individual connection parameters
export PSQL_HOST="localhost"
export PSQL_PORT="5432"
export PSQL_USER="username"
export PSQL_PASSWORD="password"
export PSQL_DATABASE="database"

# OpenAI API key
export OPENAI_API_KEY="your-openai-api-key"
Command-line Arguments
psql-query-builder \
  --host localhost \
  --port 5432 \
  --user username \
  --password password \
  --database database \
  --api-key your-openai-api-key \
  --query "Find all products with more than 100 units in stock" \
  --dry-run  # Optional: generate SQL without executing
Dry Run Mode
# Generate SQL only, don't execute (useful for reviewing queries before running on production databases)
psql-query-builder --query "Find all inactive users who haven't logged in for 3 months" --dry-run

# Output:
# Generated SQL query (dry run mode):
# --------------------------------------------------
# SELECT u.id, u.username, u.email, u.last_login
# FROM users u
# WHERE u.last_login < NOW() - INTERVAL '3 months'
# ORDER BY u.last_login ASC;
# --------------------------------------------------
Schema Caching

For better performance with repeated queries, enable schema caching:

# Enable schema caching with default settings
psql-query-builder --query "Find all users who placed orders in the last week" --cache

# Specify cache path and TTL (time-to-live in seconds)
psql-query-builder --query "Find all users who placed orders in the last week" \
  --cache \
  --cache-path "/tmp/schema_cache" \
  --cache-ttl 3600

# Force refresh the cache
psql-query-builder --query "Find all users who placed orders in the last week" \
  --cache \
  --force-refresh

📘 Advanced Usage

💬 Interactive Mode

Start an interactive session for multiple queries:

psql-query-builder

Then enter queries at the prompt:

> Find all customers in California
> Show revenue by product category
> exit

🔍 Single Query Mode

Execute a single query and exit:

psql-query-builder --query "Find all users 
who registered in the last month"

Perfect for scripts and automation

📚 API Reference

Python API
from psql_query_builder import QueryBuilder

# Initialize with connection string
builder = QueryBuilder(
    connection_string="postgresql://username:password@localhost:5432/database",
    openai_api_key="your-openai-api-key"
)

# Or with individual parameters
builder = QueryBuilder(
    host="localhost",
    port=5432,
    database="mydatabase",
    user="myuser",
    password="mypassword",
    openai_api_key="your-openai-api-key"
)

# Generate SQL without executing
sql = builder.generate_query("Find all users who registered last month")
print(sql)

# Generate and execute query
results = builder.run_query(
    "Find all products with more than 100 units in stock",
    execute=True
)
print(results)

🚩 Roadmap

Future development plans for PSQL Query Builder include:

  • Support for more database systems (MySQL, SQLite, SQL Server)
  • Interactive SQL editing and refinement
  • Query history management and reuse
  • Integration with popular database tools and ORMs
  • Web interface for non-CLI usage
  • Query optimization suggestions
  • Support for database migrations and schema changes

Feel free to contribute to any of these features or suggest new ones!

👨‍💻 Contributing

Contributions are welcome! Here's how you can help:

  1. Report bugs or request features: Open an issue describing what you found or what you'd like to see
  2. Submit improvements: Fork the repository, make your changes, and submit a pull request
  3. Improve documentation: Help clarify or expand the documentation
  4. Share your use cases: Let us know how you're using PSQL Query Builder

📜 License

MIT

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

psql_query_builder-0.2.0.tar.gz (23.8 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

psql_query_builder-0.2.0-py3-none-any.whl (23.3 kB view details)

Uploaded Python 3

File details

Details for the file psql_query_builder-0.2.0.tar.gz.

File metadata

  • Download URL: psql_query_builder-0.2.0.tar.gz
  • Upload date:
  • Size: 23.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.11.4

File hashes

Hashes for psql_query_builder-0.2.0.tar.gz
Algorithm Hash digest
SHA256 4d8d4d0bb8bf34b2be340142011250860ebeaeddbec6b3a72ca788251048ce71
MD5 03675c6a86c8e26fe83f9a820ae1f0fb
BLAKE2b-256 2e9dfd0a00e216fdad09908bb25df92fabcd70a7199500d361277b32be42ffc2

See more details on using hashes here.

File details

Details for the file psql_query_builder-0.2.0-py3-none-any.whl.

File metadata

File hashes

Hashes for psql_query_builder-0.2.0-py3-none-any.whl
Algorithm Hash digest
SHA256 4c698619442b87a8b06080bbf2b9b7ac83675ec9a35646b996b0ba171477bd8d
MD5 9e82299eddd1e394157fdc073eb681b0
BLAKE2b-256 dd47a70bd9dc7356a907cdcb7f87a46958e857116dc9b2ad2fc90d8ed36d4810

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page