Skip to main content

SQL with YAML - A simplified query language for multiple databases

Project description

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.

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

pysqly-0.49.0.tar.gz (26.2 kB view details)

Uploaded Source

Built Distribution

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

pysqly-0.49.0-py3-none-any.whl (19.3 kB view details)

Uploaded Python 3

File details

Details for the file pysqly-0.49.0.tar.gz.

File metadata

  • Download URL: pysqly-0.49.0.tar.gz
  • Upload date:
  • Size: 26.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.12.9

File hashes

Hashes for pysqly-0.49.0.tar.gz
Algorithm Hash digest
SHA256 bc4e382d74a69c950ffb0b7ded675b9bbbd92fd30d7e6dbd57f080bc49db4b3a
MD5 6fc03175b11d36f63df5f3a59776ae0c
BLAKE2b-256 cd2a1f235751e8615e8b8f58ed90f8f7c0e12780741c041cb6c3e0d80da7fa2f

See more details on using hashes here.

File details

Details for the file pysqly-0.49.0-py3-none-any.whl.

File metadata

  • Download URL: pysqly-0.49.0-py3-none-any.whl
  • Upload date:
  • Size: 19.3 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.12.9

File hashes

Hashes for pysqly-0.49.0-py3-none-any.whl
Algorithm Hash digest
SHA256 c2aef50ac7cbc4fea237cd762bce39a766816fdb04ea9e4500f77e56daac8336
MD5 d4a9a1368a7c03aafedbd36443729306
BLAKE2b-256 a47ad3467aa28e89f243da3af33bf22baa30beb8d2c23766e3ba8f5b235ab54c

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