Parses queries from an sql file, and turns them into callable f-strings. Also a file cache decorator for slow queries and multi-session permanence, supports async functions.
Project description
PyQuickSQL
For a more thorough explanation see example.md
To install: pip install qsql
How to use the query loader:
import quicksql as qq
queries = qq.LoadSQL('path/to/queries.sql')
Printing the queries should give you something like this:
LoadSQL('path/to/queries.sql')
Query Name: examplequery_1, Params: order_avg, num_orders
Query Name: examplequery_2, Params: sdate, edate, product_id
These are callable objects that return the string given the non-optional **params.
They are equivalent to an f-string + a lambda but loaded from an sql file and stored in the LoadSQL object.
print(str(queries)) will give you the raw SQL string.
How to use them:
print(queries.examplequery_2(
product_id=10,
sdate='1-10-2022',
edate=qq.NoStr("DATE'4-11-2023'"),
something_not_a_param='test'))
Unused variables: something_not_a_param in query examplequery_2
Above will be printed as a warning with invalid inclusions, no non-verbose option yet.
SELECT
c.CustomerName,
o.OrderDate,
o.Status,
(SELECT SUM(od.Quantity * od.UnitPrice) FROM OrderDetails od WHERE od.OrderID = o.OrderID) AS TotalValue
FROM
Customers c
INNER JOIN Orders o ON c.CustomerID = o.CustomerID
WHERE
o.OrderDate BETWEEN '1-10-2022' AND DATE'4-11-2023'
AND EXISTS (SELECT 1 FROM OrderDetails od WHERE od.OrderID = o.OrderID AND od.ProductID = 10)
ORDER BY
TotalValue DESC;
How to use the file cache:
This is very similar to functool's cache, with the main difference being that @qq.file_cache caches the asset to memory
and to your system's default temporary directory. If the memory cache ever fails (eg a restarted kernel) it will load the asset from it's pickled file.
from random import randint
import quicksql as qq
@qq.file_cache()
def test_mem(size:int):
return [randint(0,10) for _ in range(size)]
print(test_mem(8))
[10, 3, 4, 9, 2, 2, 4, 2]
print(test_mem(8))
[10, 3, 4, 9, 2, 2, 4, 2]
To clear the cache: qq.clear_cache()
For more examples and how to configure see example.ipynb
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
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file qsql-1.0.3.tar.gz.
File metadata
- Download URL: qsql-1.0.3.tar.gz
- Upload date:
- Size: 12.5 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: python-requests/2.32.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
ce6f2345796b96c03a68e3ac4f643b544ac0ed67c578a50be390b81a31b5c88d
|
|
| MD5 |
2adb3e99b6444f438934844da7d22cd1
|
|
| BLAKE2b-256 |
c2345d23b04dda9aa671d8a4e69343b19d6c19dbc09a8f8fa50a5d36e0859bf5
|
File details
Details for the file qsql-1.0.3-py2.py3-none-any.whl.
File metadata
- Download URL: qsql-1.0.3-py2.py3-none-any.whl
- Upload date:
- Size: 6.8 kB
- Tags: Python 2, Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: python-requests/2.32.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
2d6635bb8d290a6e75268f02980d86bddb3ca0851e726357c086d8f9bf9a6b85
|
|
| MD5 |
9998f4eb79d5d708568022527fa29571
|
|
| BLAKE2b-256 |
5cc7cb08a122326b60e70a2d3d38277e5fc57f8160408a810194c32a8021ac3a
|