An async HTTP server for SQLite, FileStorage and WebPage.
Project description
sqless
An async HTTP server for SQLite, FileStorage and WebPage.
Why sqless is special:
- Schema free. Auto adjusts SQLite schema to fit JSON inputs.
- High performance. Faster than many sqlite ORMs.
- Minimal setup. Just
pip install sqlessto run the server. - Multi-file sharding. Shard data across multiple SQLite files.
Description
sqless is a Python application that provides web service with local database and local file storage.
Installation
pip install sqless
Quick Start
Running the server
sqless --host 127.0.0.1 --port 12239 --secret your-secret-key
This will create www directory in the current directory, which is used for WebPage.
You can access the www/index.html at http://127.0.0.1:12239/index.html
It will also creates db and fs directories in the current directory, when saving data by database API and file storage API.
Using the database API
import requests
# Set up the base URL and authentication
BASE_URL = "http://127.0.0.1:12239"
SECRET = "your-secret-key"
DB_TABLE = "users"
# Insert or update data
r = requests.post(
f"{BASE_URL}/db/{DB_TABLE}",
headers={"Authorization": f"Bearer {SECRET}"},
json={"key": "U001", "name": "Tom", "age": 14}
)
# Query data
r = requests.get(
f"{BASE_URL}/db/{DB_TABLE}/key = U001",
headers={"Authorization": f"Bearer {SECRET}"}
)
# Fuzzy query
r = requests.get(
f"{BASE_URL}/db/{DB_TABLE}/name like %om%?limit=10&page=1",
headers={"Authorization": f"Bearer {SECRET}"}
)
# Value query
r = requests.get(
f"{BASE_URL}/db/{DB_TABLE}/age > 10?limit=10&page=1",
headers={"Authorization": f"Bearer {SECRET}"}
)
# Delete data
r = requests.delete(
f"{BASE_URL}/db/{DB_TABLE}/key = U001",
headers={"Authorization": f"Bearer {SECRET}"}
)
sqless does not limit you to one database.
You can access many SQLite databases by using a separator in the table name DB_TABLE.
Example:
/db/users -> db/default.sqlite (table: users)
/db/mall-users -> db/mall.sqlite (table: users)
/db/east-mall-users -> db/east/mall.sqlite (table: users)
Using the FileStorage API
import requests
# Upload a file to ./fs/example.txt
with open("example.txt", "rb") as f:
r = requests.post(
f"{BASE_URL}/fs/example.txt",
headers={"Authorization": f"Bearer {SECRET}"},
files={"file": f}
)
# Check if a file exists
r = requests.get(
f"{BASE_URL}/fs/example.txt?check=1",
headers={"Authorization": f"Bearer {SECRET}"}
)
# Download a file
r = requests.get(
f"{BASE_URL}/fs/example.txt",
headers={"Authorization": f"Bearer {SECRET}"},
stream=True
)
with open("downloaded_example.txt", "wb") as f:
for chunk in r.iter_content(chunk_size=8192):
f.write(chunk)
Using the Proxy API
import requests
import base64
payload = {
"method": "POST",
"url": "https://httpbin.org/post",
"headers": {
"User-Agent": "SQLESS-Client/1.0",
"Authorization": "Bearer mytoken"
},
"type": "form",
"data": {"foo": "bar"},
"files": [
{
"field": "file1",
"filename": "example.txt",
"content_type": "text/plain",
"base64": base64.b64encode(open("example.txt", "rb").read()).decode()
}
]
}
r = requests.post(
f"{BASE_URL}/xmlhttpRequest",
headers={"Authorization": f"Bearer {SECRET}"},
json=payload
)
print(r.json())
Use sqless to store python data
Example:
import sqless
db = sqless.DB(path_db = "your_database.db")
users = db['users'] # create/get a "users" table
# Set data
users['U0001'] = {"name": "Tom", 'age':12, 'sex':'M', 'hobby':["football", 'basketball'],'meta':{"height": 1.75, "weight": 70}}
# is the same as
# db.upsert("users", {"key": 'U0001', "name": "Tom", 'age':12, 'sex':'M', 'hobby':["football", 'basketball'],'meta':{"height": 1.75, "weight": 70}})
db.upsert("users", {"key": 'U0002', "name": "Jerry", 'age':8, 'sex':'M', 'hobby':["football", 'basketball'],'meta':{"height": 1.25, "weight": 30}})
# Get data
print(users['U0001'])
# is the same as
print(db.get("users", "key = U0001"))
r = db.query("users", 'age > 9')
print(r)
r = db.query("users", 'meta like %"height":1.25%')
print(r)
License
This project is licensed under the MIT License - see the LICENSE file for details.
Project details
Release history Release notifications | RSS feed
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 sqless-0.1.6.tar.gz.
File metadata
- Download URL: sqless-0.1.6.tar.gz
- Upload date:
- Size: 15.5 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
551525089cba18dc51db10b9a7faa1f17d60472ff1bc2cdd20eb8648aac115c5
|
|
| MD5 |
d139516a815868d09835937b68d0c6c5
|
|
| BLAKE2b-256 |
8d9046c9a88631c2c5664ef94fa59433219b763c38167e42a561122c33abd919
|
File details
Details for the file sqless-0.1.6-py3-none-any.whl.
File metadata
- Download URL: sqless-0.1.6-py3-none-any.whl
- Upload date:
- Size: 15.0 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
ab9ff7d5d452fb6cf0a565acbbafc33a7c5de3ac9c9e6d8a8093f93adc662b1b
|
|
| MD5 |
a3f704a8469921ba7a77af9c9c410928
|
|
| BLAKE2b-256 |
35af297fdcc85df2cb2a9f395f9ee422b61c14ce03e20eff913586a2b8c9b625
|