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

Uploaded Python 3

File details

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

File metadata

  • Download URL: pysqly-0.57.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.57.0.tar.gz
Algorithm Hash digest
SHA256 9c04359f63fd8e01282d572108f4ea89e5fde3ba5ea81a97297d22c8725e21a4
MD5 97bad56a070df89ff25fe0ba72940f0e
BLAKE2b-256 f619a43d0c9f1a94fb1d47fe0d01bd4a4196e51314a4cc9f49015daf57d87e97

See more details on using hashes here.

File details

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

File metadata

  • Download URL: pysqly-0.57.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.57.0-py3-none-any.whl
Algorithm Hash digest
SHA256 62671fc3a669a896517c4f9b2e545cadd621bd95b25946e2f253a0f5fdd552c6
MD5 fa66894bd8dcc14b92dc66f128c7ce3b
BLAKE2b-256 1a4ed731f5b8ab62ad30d1fc040f3afa46ff0849afa784bb9324718c9667fa86

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