firebolt-sqlalchemy


Namefirebolt-sqlalchemy JSON
Version 1.0.2 PyPI version JSON
download
home_pagehttps://github.com/firebolt-db/firebolt-sqlalchemy
SummarySqlalchemy adapter for Firebolt
upload_time2024-04-24 17:07:25
maintainerNone
docs_urlNone
authorFirebolt
requires_python>=3.7
licenseApache-2.0
keywords
VCS
bugtrack_url
requirements No requirements were recorded.
Travis-CI No Travis.
coveralls test coverage
            <p align="center">
    <img width="761" alt="SQLAlchemy and Firebolt" src="https://user-images.githubusercontent.com/7674553/145249436-534b3cc0-2350-4f7e-9c56-78ffbcc0f003.png">
</p>

# firebolt-sqlalchemy

[![Unit tests](https://github.com/firebolt-db/firebolt-sqlalchemy/actions/workflows/unit-tests.yml/badge.svg)](https://github.com/firebolt-db/firebolt-sqlalchemy/actions/workflows/unit-tests.yml)
[![Code quality checks](https://github.com/firebolt-db/firebolt-sqlalchemy/actions/workflows/code-check.yml/badge.svg)](https://github.com/firebolt-db/firebolt-sqlalchemy/actions/workflows/code-check.yml)
[![Firebolt Security Scan](https://github.com/firebolt-db/firebolt-sqlalchemy/actions/workflows/security-scan.yml/badge.svg)](https://github.com/firebolt-db/firebolt-sqlalchemy/actions/workflows/security-scan.yml)
[![Integration tests](https://github.com/firebolt-db/firebolt-sqlalchemy/actions/workflows/python-integration-tests.yml/badge.svg)](https://github.com/firebolt-db/firebolt-sqlalchemy/actions/workflows/python-integration-tests.yml)
![Coverage](https://img.shields.io/endpoint?url=https://gist.githubusercontent.com/ptiurin/64f31d124b7249319234d247ade4a7db/raw/firebolt-sqlalchemy-coverage.json)



The [Firebolt](https://www.firebolt.io/) dialect for [SQLAlchemy](https://www.sqlalchemy.org/). `firebolt-sqlalchemy` uses [Firebolt's Python SDK](https://github.com/firebolt-db/firebolt-python-sdk) which implements [PEP 249](https://www.python.org/dev/peps/pep-0249/).

* [SQLAlchemy Dialects](https://docs.sqlalchemy.org/en/20/dialects/index.html#external-dialects)
* [PyPI Package](https://pypi.org/project/firebolt-sqlalchemy/)

## Installation

Requires Python >=3.7.

```bash
pip install firebolt-sqlalchemy
```

## Connecting

Connection strings use the following structure:

```
firebolt://{client_id}:{client_secret}@{database}[/{engine_name}]?account_name={name}
```

`engine_name` is optional.

`account_name` is required.

Examples:

```
firebolt://aaa-bbb-ccc-222:$ecret@sample_database?account_name=my_account
firebolt://aaa-bbb-ccc-222:$ecret@sample_database/sample_engine?account_name=my_account
```

To override the API URL (e.g. for dev testing):

```bash
export FIREBOLT_BASE_URL=<your_url>
```

If your secret contains % or / characters they need to be sanitised as per https://docs.sqlalchemy.org/en/20/core/engines.html#database-urls
```python
my_secret = "0920%/2"
import urllib.parse
new_secret = urllib.parse.quote_plus(my_secret)
```

## Quick Start

```python
import urllib.parse
from sqlalchemy import create_engine

secret = urllib.parse.quote_plus("your_secret_here")
engine = create_engine("firebolt://aaa-bbb-ccc-222:" + secret + "@sample_database/sample_engine?account_name=my_account")
connection = engine.connect()

connection.execute("CREATE FACT TABLE example(dummy int) PRIMARY INDEX dummy")
connection.execute("INSERT INTO example(dummy) VALUES (11)")
result = connection.execute("SELECT * FROM example")
for item in result.fetchall():
    print(item)
```

### [AsyncIO](https://docs.sqlalchemy.org/en/20/orm/extensions/asyncio.html) extension

```python
import urllib.parse
from sqlalchemy import text
from sqlalchemy.ext.asyncio import create_async_engine

secret = urllib.parse.quote_plus("your_secret_here")
engine = create_async_engine("asyncio+firebolt://aaa-bbb-ccc-222:" + secret + "@sample_database/sample_engine?account_name=my_account")

async with engine.connect() as conn:

    await conn.execute(
        text(f"INSERT INTO example(dummy) VALUES (11)")
    )

    result = await conn.execute(
        text(f"SELECT * FROM example")
    )
    print(result.fetchall())

await engine.dispose()
```


## Limitations

1. Transactions are not supported since Firebolt database does not support them at this time.
1. Parametrised calls to execute and executemany are not implemented.

## Contributing

See: [CONTRIBUTING.MD](https://github.com/firebolt-db/firebolt-sqlalchemy/tree/master/CONTRIBUTING.MD)

            

Raw data

            {
    "_id": null,
    "home_page": "https://github.com/firebolt-db/firebolt-sqlalchemy",
    "name": "firebolt-sqlalchemy",
    "maintainer": null,
    "docs_url": null,
    "requires_python": ">=3.7",
    "maintainer_email": null,
    "keywords": null,
    "author": "Firebolt",
    "author_email": "pypi@firebolt.io",
    "download_url": "https://files.pythonhosted.org/packages/48/d2/8763dddf8306bbeae8abc924af670238f4b939dce778ddb683f0fdfe02fb/firebolt_sqlalchemy-1.0.2.tar.gz",
    "platform": null,
    "description": "<p align=\"center\">\n    <img width=\"761\" alt=\"SQLAlchemy and Firebolt\" src=\"https://user-images.githubusercontent.com/7674553/145249436-534b3cc0-2350-4f7e-9c56-78ffbcc0f003.png\">\n</p>\n\n# firebolt-sqlalchemy\n\n[![Unit tests](https://github.com/firebolt-db/firebolt-sqlalchemy/actions/workflows/unit-tests.yml/badge.svg)](https://github.com/firebolt-db/firebolt-sqlalchemy/actions/workflows/unit-tests.yml)\n[![Code quality checks](https://github.com/firebolt-db/firebolt-sqlalchemy/actions/workflows/code-check.yml/badge.svg)](https://github.com/firebolt-db/firebolt-sqlalchemy/actions/workflows/code-check.yml)\n[![Firebolt Security Scan](https://github.com/firebolt-db/firebolt-sqlalchemy/actions/workflows/security-scan.yml/badge.svg)](https://github.com/firebolt-db/firebolt-sqlalchemy/actions/workflows/security-scan.yml)\n[![Integration tests](https://github.com/firebolt-db/firebolt-sqlalchemy/actions/workflows/python-integration-tests.yml/badge.svg)](https://github.com/firebolt-db/firebolt-sqlalchemy/actions/workflows/python-integration-tests.yml)\n![Coverage](https://img.shields.io/endpoint?url=https://gist.githubusercontent.com/ptiurin/64f31d124b7249319234d247ade4a7db/raw/firebolt-sqlalchemy-coverage.json)\n\n\n\nThe [Firebolt](https://www.firebolt.io/) dialect for [SQLAlchemy](https://www.sqlalchemy.org/). `firebolt-sqlalchemy` uses [Firebolt's Python SDK](https://github.com/firebolt-db/firebolt-python-sdk) which implements [PEP 249](https://www.python.org/dev/peps/pep-0249/).\n\n* [SQLAlchemy Dialects](https://docs.sqlalchemy.org/en/20/dialects/index.html#external-dialects)\n* [PyPI Package](https://pypi.org/project/firebolt-sqlalchemy/)\n\n## Installation\n\nRequires Python >=3.7.\n\n```bash\npip install firebolt-sqlalchemy\n```\n\n## Connecting\n\nConnection strings use the following structure:\n\n```\nfirebolt://{client_id}:{client_secret}@{database}[/{engine_name}]?account_name={name}\n```\n\n`engine_name` is optional.\n\n`account_name` is required.\n\nExamples:\n\n```\nfirebolt://aaa-bbb-ccc-222:$ecret@sample_database?account_name=my_account\nfirebolt://aaa-bbb-ccc-222:$ecret@sample_database/sample_engine?account_name=my_account\n```\n\nTo override the API URL (e.g. for dev testing):\n\n```bash\nexport FIREBOLT_BASE_URL=<your_url>\n```\n\nIf your secret contains % or / characters they need to be sanitised as per https://docs.sqlalchemy.org/en/20/core/engines.html#database-urls\n```python\nmy_secret = \"0920%/2\"\nimport urllib.parse\nnew_secret = urllib.parse.quote_plus(my_secret)\n```\n\n## Quick Start\n\n```python\nimport urllib.parse\nfrom sqlalchemy import create_engine\n\nsecret = urllib.parse.quote_plus(\"your_secret_here\")\nengine = create_engine(\"firebolt://aaa-bbb-ccc-222:\" + secret + \"@sample_database/sample_engine?account_name=my_account\")\nconnection = engine.connect()\n\nconnection.execute(\"CREATE FACT TABLE example(dummy int) PRIMARY INDEX dummy\")\nconnection.execute(\"INSERT INTO example(dummy) VALUES (11)\")\nresult = connection.execute(\"SELECT * FROM example\")\nfor item in result.fetchall():\n    print(item)\n```\n\n### [AsyncIO](https://docs.sqlalchemy.org/en/20/orm/extensions/asyncio.html) extension\n\n```python\nimport urllib.parse\nfrom sqlalchemy import text\nfrom sqlalchemy.ext.asyncio import create_async_engine\n\nsecret = urllib.parse.quote_plus(\"your_secret_here\")\nengine = create_async_engine(\"asyncio+firebolt://aaa-bbb-ccc-222:\" + secret + \"@sample_database/sample_engine?account_name=my_account\")\n\nasync with engine.connect() as conn:\n\n    await conn.execute(\n        text(f\"INSERT INTO example(dummy) VALUES (11)\")\n    )\n\n    result = await conn.execute(\n        text(f\"SELECT * FROM example\")\n    )\n    print(result.fetchall())\n\nawait engine.dispose()\n```\n\n\n## Limitations\n\n1. Transactions are not supported since Firebolt database does not support them at this time.\n1. Parametrised calls to execute and executemany are not implemented.\n\n## Contributing\n\nSee: [CONTRIBUTING.MD](https://github.com/firebolt-db/firebolt-sqlalchemy/tree/master/CONTRIBUTING.MD)\n",
    "bugtrack_url": null,
    "license": "Apache-2.0",
    "summary": "Sqlalchemy adapter for Firebolt",
    "version": "1.0.2",
    "project_urls": {
        "Bug Tracker": "https://github.com/firebolt-db/firebolt-sqlalchemy",
        "Download": "https://github.com/firebolt-db/firebolt-sqlalchemy/archive/refs/tags/0.0.9.tar.gz",
        "Homepage": "https://github.com/firebolt-db/firebolt-sqlalchemy"
    },
    "split_keywords": [],
    "urls": [
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "bcd21b867fac57a763b95e1f533288df19e5788f1cc6b5fc45baa314e61cfce0",
                "md5": "b6323487971b084caaaf364cbdf8cf7b",
                "sha256": "92e7f3266ad6cb589e1b0326f5466891c8217bfda3ab640715efdc14f50551f5"
            },
            "downloads": -1,
            "filename": "firebolt_sqlalchemy-1.0.2-py3-none-any.whl",
            "has_sig": false,
            "md5_digest": "b6323487971b084caaaf364cbdf8cf7b",
            "packagetype": "bdist_wheel",
            "python_version": "py3",
            "requires_python": ">=3.7",
            "size": 12487,
            "upload_time": "2024-04-24T17:07:24",
            "upload_time_iso_8601": "2024-04-24T17:07:24.039199Z",
            "url": "https://files.pythonhosted.org/packages/bc/d2/1b867fac57a763b95e1f533288df19e5788f1cc6b5fc45baa314e61cfce0/firebolt_sqlalchemy-1.0.2-py3-none-any.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "48d28763dddf8306bbeae8abc924af670238f4b939dce778ddb683f0fdfe02fb",
                "md5": "8c8fdbd770960b25bd20c298014fcf8f",
                "sha256": "fe64c37e13dd8dc408908995371e2cbb34b5afae6d5a7a212cbc248db81d43fd"
            },
            "downloads": -1,
            "filename": "firebolt_sqlalchemy-1.0.2.tar.gz",
            "has_sig": false,
            "md5_digest": "8c8fdbd770960b25bd20c298014fcf8f",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": ">=3.7",
            "size": 11704,
            "upload_time": "2024-04-24T17:07:25",
            "upload_time_iso_8601": "2024-04-24T17:07:25.787469Z",
            "url": "https://files.pythonhosted.org/packages/48/d2/8763dddf8306bbeae8abc924af670238f4b939dce778ddb683f0fdfe02fb/firebolt_sqlalchemy-1.0.2.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2024-04-24 17:07:25",
    "github": true,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "github_user": "firebolt-db",
    "github_project": "firebolt-sqlalchemy",
    "travis_ci": false,
    "coveralls": true,
    "github_actions": true,
    "lcname": "firebolt-sqlalchemy"
}
        
Elapsed time: 0.24812s