pySQLY - Python Standard Query Language | SQL with YAML Syntax

pySQLY is a Python library that standardizes SQL querying with YAML syntax, making database operations consistent across multiple database engines

View project on GitHub

pySQLY - SQL with YAML

Python package PyPI version License: MIT

Overview

pySQLY is a Python library that enables developers to write database queries using YAML syntax instead of traditional SQL. This approach simplifies database interactions, enhances readability, and provides a consistent interface across multiple database systems.

Key Features

  • Multi-Database Support: Works with SQLite, MariaDB/MySQL, PostgreSQL, Oracle, and Microsoft SQL Server
  • YAML-Based Syntax: Intuitive, structured query format that reduces syntax errors
  • Unified Interface: Single API to interact with different database systems
  • CLI Support: Run SQLY queries directly from the command line
  • Type Safety: Leverages Python type annotations for better IDE support and error checking

Installation

Install pySQLY from PyPI:

pip install pysqly

To include support for specific databases, use the optional extras:

# For MariaDB/MySQL support
pip install "pysqly[mariadb]"

# For PostgreSQL support
pip install "pysqly[postgres]"

# For Oracle support
pip install "pysqly[oracle]"

# For Microsoft SQL Server support
pip install "pysqly[mssql]"

# For all database support
pip install "pysqly[all]"

Dependencies

pySQLY core requires only PyYAML. Additional database drivers are installed based on your needs:

  • SQLite: Built into Python standard library
  • MariaDB/MySQL: mysql-connector-python
  • PostgreSQL: psycopg2
  • Oracle: cx_Oracle
  • Microsoft SQL Server: pyodbc

Quick Start

Basic Query Example

from pysqly import SQLYExecutor

# Connect to a SQLite database
executor = SQLYExecutor("path/to/database.db", "sqlite")

# Define your query in YAML format
query = """
select:
  - username
  - email
  - created_at
from: users
where:
  - field: active
    operator: "="
    value: true
  - field: last_login
    operator: ">"
    value: "2023-01-01"
"""

# Execute the query
results = executor.execute(query)
print(results)

Using the CLI

sqly-cli "select: [username, email]\nfrom: users\nwhere:\n  - field: active\n    operator: '='\n    value: true" --db_type sqlite --datasource "path/to/database.db"

Documentation

Project Structure

pySQLY/
├── src/
│   └── pysqly/               # Main package directory
│       ├── __init__.py       # Package exports and version
│       ├── cli.py            # Command-line interface
│       ├── core/             # Core functionality
│       │   ├── __init__.py
│       │   ├── executor.py   # Main SQLY executor
│       │   ├── parser.py     # YAML to SQL parser
│       │   └── utils.py      # Helper utilities
│       ├── errors/           # Error handling
│       │   ├── __init__.py
│       │   ├── base.py       # Base error class
│       │   ├── execution.py  # Execution errors
│       │   └── parse.py      # Parsing errors
│       └── connectors/       # Database connectors
│           ├── __init__.py
│           ├── interface.py  # Connector interface
│           ├── base.py       # Base connector implementation
│           ├── factory.py    # Connector factory
│           ├── database.py   # Database connection manager
│           ├── sqlite.py     # SQLite connector
│           ├── mariadb.py    # MariaDB connector
│           ├── postgres.py   # PostgreSQL connector
│           ├── oracle.py     # Oracle connector
│           └── mssql.py      # MS SQL Server connector
├── tests/                    # Test directory
│   ├── __init__.py
│   ├── conftest.py           # Test fixtures and configuration
│   ├── test_parser.py        # Parser tests
│   └── test_utils.py         # Utilities tests
├── pyproject.toml            # Project metadata and dependencies
├── setup.py                  # Setup script (for backwards compatibility)
├── requirements.txt          # Development dependencies
├── MANIFEST.in               # Package manifest
├── LICENSE                   # MIT license
├── README.md                 # This file
├── API.md                    # API documentation
├── EXAMPLES.md               # Usage examples
├── CONTRIBUTING.md           # Contribution guidelines
├── CODE_OF_CONDUCT.md        # Code of conduct
├── SECURITY.md               # Security policy
├── DESIGN.md                 # Architecture design
└── CHANGELOG.md              # Version history

SQLY Query Format

SQLY queries use YAML syntax to represent SQL operations:

# Basic SELECT query
select:
  - column1
  - column2
from: table_name
where:
  - field: column1
    operator: "="
    value: some_value

See the Examples document for more complex query patterns.

Why Choose pySQLY?

  • Simplified Database Access: Write database queries in a more readable format
  • Database Agnostic: Switch between database systems without changing your query syntax
  • Reduced SQL Injection Risk: Parameter binding is handled automatically
  • Improved Productivity: Less boilerplate code and more intuitive query structure
  • Easy Integration: Works with your existing Python applications

License

pySQLY is distributed under the MIT License.