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.1.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.1.0-py3-none-any.whl (19.3 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: pysqly-0.1.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.1.0.tar.gz
Algorithm Hash digest
SHA256 157b3551fcbde124d0d5c806a89de5dab95f8044270e3a67253717e1250bdc8e
MD5 4bdde9185fd30bc946c01d0035b035b8
BLAKE2b-256 f5ac01560ba252a973a1138cb6cb6b29a3da069df80ec0310c5af710d70577cf

See more details on using hashes here.

File details

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

File metadata

  • Download URL: pysqly-0.1.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.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 7bc6337c797224e91cb295d94f5d6cff6c7c3f3caf06bddd16cf5d72b455ce47
MD5 caa5ca0c65d5f6ac76621dccef9d8c98
BLAKE2b-256 d23c355108b84e6bed4b1c8c4a32aec3ebdc4da72afe0d06fda908f32a7c5745

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