toolsql
toolsql makes it easy to build sql queries and execute those queries
toolsql's goals:
- provide identical interfaces to sqlite + postgresql
- provide nearly identical interfaces for synchronous +
asyncusage - minimize startup import time
- maximize read / write performance
- tight integration with connectorx and polars
- make it easy to drop into raw SQL when needed
- use basic python datatypes instead of custom objects
- mypy typing with
strict=True
Contents
Installation
pip install toolsql- requires python 3.7 - 3.11
Example Usage
- Specify Database Configuration
- Specify Table Schema
- DDL Statements
- DML Statements
- Transactions
asyncFunctionality
Specify Database Configuration
# sqlite
db_config = {
'dbms': 'sqlite',
'path': '/path/to/sqlite/file.db',
}
# postgresql
db_config = {
'dbms': 'postgresql',
'database': '<database_name>',
'hostname': '<hostname>',
'username': '<username>',
'password': '<password>',
}
Specify Table Schema
table = {
'name': 'weather',
'columns': [
{'name': 'year', 'type': 'Integer', 'primary': True},
{'name': 'month', 'type': 'Integer', 'primary': True},
{'name': 'rainfall', 'type': 'Float'},
{'name': 'temperature', 'type': 'Float'},
{'name': 'country', 'type': 'Float'},
],
}
DDL Statements
with toolsql.connect(db_config) as conn:
# CREATE
toolsql.create_table(
table=table,
conn=conn,
confirm=True,
)
# DROP
toolsql.drop_table(
table=table,
conn=conn,
confirm=True,
)
DML Statements
rows = [
(2020, 1, 8.2, 90, 'Turkey'),
(2020, 5, 1.1, 50, 'Germany'),
(2020, 9, 7.4, 60, 'UK'),
(2021, 1, 5.2, 72, 'France'),
(2021, 5, 2.1, 56, 'Argentina'),
(2021, 9, 6.4, 68, 'Sweden'),
(2022, 1, 1.2, 70, 'Indonesia'),
(2022, 5, 4.1, 56, 'Vietnam'),
(2022, 9, 9.4, 60, 'India'),
]
with toolsql.connect(db_config) as conn:
# INSERT
toolsql.insert(
rows=rows,
table=table,
conn=conn,
)
# SELECT
toolsql.select(
where_equals={'country': 'Turkey'},
table=table,
conn=conn,
)
# UPDATE
toolsql.update(
values={'country': 'Türkiye'},
where_equals={'country': 'Turkey'},
table=table,
conn=conn,
)
# DELETE
toolsql.delete(
where_equals={'country': 'Türkiye'},
table=table,
conn=conn,
)
Transactions
with toolsql.connect(db_config) as conn:
with toolsql.transaction(conn)
# will commit if context exits error-free
# ...
async Functionality
async with toolsql.async_connect(db_config) as conn:
await toolsql.async_select(
with_equals={'country': 'Turkey'},
table=table,
conn=conn,
)
async with toolsql.async_transaction():
await toolsql.async_insert(
rows=rows,
table=table,
conn=conn,
)
await toolsql.async_update(
values={'country': 'Türkiye'},
where_equals={'country': 'Turkey'},
table=table,
conn=conn,
)
await toolsql.async_delete(
where_equals={'country': 'Türkiye'},
table=table,
conn=conn,
)
Reference
Supported Executors
sqlite3: sqlite sync readsaiosqlite: sqlite async readspsycopg: postgres sync / async readsconnectorx: simple read queries
SELECT input arguments
distinctwhere_equalswhere_gtwhere_gtewhere_ltwhere_ltewhere_likewhere_ilikewhere_inwhere_ororder_bylimitoffset
SELECT output formats
'tuple': each row is a tuple'dict': each row is a dict'cursor': query cursor'polars': polars dataframe of rows'pandas': pandas dataframe of rows'single_tuple': single row of output as a tuple'single_tuple_or_none': single row of output as a tuple'single_dict': single row of output as a dict'single_dict_or_none': single row of output as a dict'cell': single column of single row'cell_or_none': single column of single row'single_column': single column
Metadata
Release files for toolsql 0.6.4
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | |
|---|---|---|---|---|
| toolsql-0.6.4.tar.gz | 50.4 kB | Without provenance | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| toolsql-0.6.4-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 113.7 kB
Release files / toolsql-0.6.4.tar.gz
| Download URL | toolsql-0.6.4.tar.gz |
|---|---|
| Size | 50.4 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
141d3ff7b9ab5813aff947ed677a0588572cb41e3799b89aebfaad9c2618484c
|
|
BLAKE2b-256 checksum How to use checksums |
3d8746d666b3ff8ab41f6d7e09fdcdd9d6996055e02ea0a5bb42ffdc8e9b0a69
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
python-requests/2.30.0
|
Release files / toolsql-0.6.4-py3-none-any.whl
| Download URL | toolsql-0.6.4-py3-none-any.whl |
|---|---|
| Size | 63.3 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
60b46fda649d0ec2f9ed91684235bfa0e59d080672752d88b7b51b28a259a194
|
|
BLAKE2b-256 checksum How to use checksums |
24aad444b189601aa9a1d4bfb3b34aede6fa9582f8039a25a53ee398bc3a66a1
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
python-requests/2.30.0
|
Security for toolsql 0.6.4
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.