A secure and flexible database library with encryption and remote access
Project description
ValtDB
ValtDB - это современная, безопасная и высокопроизводительная база данных, написанная на Python. Она предоставляет интуитивно понятный API для работы с данными, поддерживает шифрование и предлагает широкие возможности для запросов.
Особенности
- 🚀 Высокая производительность и оптимизация
- 🔒 Встроенное шифрование данных
- 🎯 Интуитивный и удобный API
- 📊 Продвинутый построитель запросов
- 🔄 Поддержка транзакций
- 📦 Простая установка и использование
- 🛡️ Безопасность и контроль доступа
- 🔍 Гибкие возможности поиска и фильтрации
Установка
pip install valtdb
Быстрый старт
Инициализация и создание базы данных
from valtdb.api import ValtDB
# Создание экземпляра ValtDB
db = ValtDB("./data")
# Создание базы данных
db.db("myapp")
# Создание зашифрованной базы данных
secure_db = db.db("secure_app", {
"algorithm": "AES",
"hash_algorithm": "SHA256"
})
Создание и определение таблиц
# Простая таблица
users = db.table("users", {
"id": "int",
"name": "str",
"email": "str"
})
# Расширенное определение схемы
posts = db.table("posts", {
"id": {"type": "int", "required": True, "unique": True},
"title": {"type": "str", "required": True},
"content": {"type": "str", "encrypted": True},
"status": {"type": "str", "choices": ["draft", "published", "archived"]},
"views": {"type": "int", "default": 0},
"created_at": {"type": "datetime", "auto_now": True},
"tags": {"type": "list", "item_type": "str"}
})
Базовые операции с данными
# Вставка одной записи
users.insert({
"id": 1,
"name": "John Doe",
"email": "john@example.com"
})
# Массовая вставка
users.bulk_insert([
{"id": 2, "name": "Jane Doe", "email": "jane@example.com"},
{"id": 3, "name": "Bob Smith", "email": "bob@example.com"}
])
# Обновление
users.query().where(id=1).update({"name": "John Smith"})
# Удаление
users.query().where(email="john@example.com").delete()
Продвинутые возможности
Построитель запросов
Базовые запросы
# Простой поиск
active_users = users.query()\
.where(status="active")\
.get()
# Выбор полей
names = users.query()\
.select("name", "email")\
.where(status="active")\
.get()
# Сортировка
sorted_users = users.query()\
.order_by("name", SortOrder.ASC)\
.get()
Сложные условия
# Множественные условия
results = users.query()\
.where(status="active")\
.where_between("age", 18, 65)\
.where_not_null("email")\
.where_like("name", "%John%")\
.get()
# OR условия
results = users.query()\
.where(role="admin")\
.or_where(status="premium")\
.get()
# IN условия
results = users.query()\
.where_in("status", ["active", "pending"])\
.get()
# Сложные фильтры
premium_active_users = users.query()\
.where(status="active")\
.where(subscription="premium")\
.where_greater("last_login", "2024-01-01")\
.where_not_in("role", ["banned", "suspended"])\
.get()
Агрегация и группировка
# Подсчет
total = users.query().count()
# Среднее значение
avg_age = users.query()\
.where(status="active")\
.avg("age")
# Группировка
stats = users.query()\
.select("country", db.raw("COUNT(*) as user_count"))\
.group_by("country")\
.having("user_count", ("GT", 100))\
.get()
# Сложная агрегация
user_stats = users.query()\
.select(
"department",
db.raw("AVG(salary) as avg_salary"),
db.raw("COUNT(*) as employee_count")
)\
.group_by("department")\
.having("employee_count", ("GT", 5))\
.order_by("avg_salary", SortOrder.DESC)\
.get()
Соединения таблиц
# INNER JOIN
user_posts = users.query()\
.select("users.name", "posts.title")\
.join("posts", {"users.id": "posts.user_id"})\
.where("posts.status", "published")\
.get()
# LEFT JOIN с условиями
results = users.query()\
.select("users.*", "orders.total")\
.left_join("orders", {"users.id": "orders.user_id"})\
.where("users.status", "active")\
.where_greater("orders.total", 1000)\
.get()
Транзакции
# Простая транзакция
with db.transaction():
user_id = users.insert_get_id({
"name": "New User",
"email": "new@example.com"
})
posts.insert({
"user_id": user_id,
"title": "First Post"
})
# Обработка ошибок в транзакции
try:
with db.transaction():
users.insert({"id": 1, "name": "Test"})
posts.insert({"id": 1, "invalid": "data"})
except Exception:
print("Транзакция отменена")
Пагинация и чанки
# Простая пагинация
posts, meta = posts.query()\
.where(status="published")\
.order_by("created_at", SortOrder.DESC)\
.paginate(page=2, per_page=20)
print(f"Showing {meta['from']} to {meta['to']} of {meta['total']} entries")
# Обработка больших наборов данных
users.query()\
.where(status="active")\
.chunk(100, lambda batch: process_users(batch))
Шифрование данных
# Создание таблицы с шифрованием
secure_users = db.table("secure_users", {
"id": "int",
"name": "str",
"email": {"type": "str", "encrypted": True},
"ssn": {"type": "str", "encrypted": True},
"notes": {"type": "str", "encrypted": True}
})
# Работа с зашифрованными данными
secure_users.insert({
"id": 1,
"name": "John Doe",
"email": "john@example.com",
"ssn": "123-45-6789",
"notes": "Конфиденциальная информация"
})
Бэкапы и восстановление
# Создание бэкапа
backup_file = db.backup("./backups")
# Восстановление из бэкапа
db.restore(backup_file)
Сырые запросы
# Выполнение сырого SQL
results = db.execute(
"SELECT users.*, COUNT(orders.id) as order_count " +
"FROM users " +
"LEFT JOIN orders ON users.id = orders.user_id " +
"GROUP BY users.id " +
"HAVING order_count > :min_orders",
{"min_orders": 5}
)
Обновления API
Новые возможности
- Добавлен метод
exec_commandдля выполнения команд через SSH. - Поддержка новых параметров в методах работы с базой данных.
Примеры использования
Выполнение команды через SSH
from valtdb.ssh import SSHConnection
connection = SSHConnection(host='example.com', username='user', password='pass')
result = connection.exec_command('ls -la')
print(result)
Вклад в проект
Мы приветствуем вклад в развитие ValtDB! Пожалуйста, ознакомьтесь с руководством по внесению изменений.
Лицензия
ValtDB распространяется под лицензией MIT. Подробности в файле LICENSE.
Поддержка
- 💬 Telegram
Авторы
ValtDB разрабатывается и поддерживается командой разработчиков.
Теги
#python #database #encryption #secure-database #nosql #embedded-database #python-library #database-management #crypto #secure-storage #key-value-store #document-database #python-package #database-security #python3 #encrypted-storage #secure-communication #database-tools #python-development #data-storage
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 valtdb-1.0.0.tar.gz.
File metadata
- Download URL: valtdb-1.0.0.tar.gz
- Upload date:
- Size: 45.5 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.0.1 CPython/3.12.8
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
48cff885f1688e0953b62524189e5fb521a26ec1110269a5e7d16a8954f8f650
|
|
| MD5 |
17f23f45f230a8a2337912c02c8a61c7
|
|
| BLAKE2b-256 |
317e234b7b080cbc3925596c5b595db27dd6c6c244822e5ba8a89dd100cf0ee2
|
File details
Details for the file valtdb-1.0.0-py3-none-any.whl.
File metadata
- Download URL: valtdb-1.0.0-py3-none-any.whl
- Upload date:
- Size: 39.9 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.0.1 CPython/3.12.8
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
0da3be31e29f70e9a4ed08f84340d5a4508cdd81ee1ba473e4a799c1b1b22df9
|
|
| MD5 |
3d8b5a614b0554b28a7894f3fe2970f4
|
|
| BLAKE2b-256 |
f701a16feed40cf2e596cc7022bd5383c3b8116339077a920916f80e7ade8873
|