Skip to main content

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.

Поддержка

Авторы

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


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

valtdb-1.0.0.tar.gz (45.5 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

valtdb-1.0.0-py3-none-any.whl (39.9 kB view details)

Uploaded Python 3

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

Hashes for valtdb-1.0.0.tar.gz
Algorithm Hash digest
SHA256 48cff885f1688e0953b62524189e5fb521a26ec1110269a5e7d16a8954f8f650
MD5 17f23f45f230a8a2337912c02c8a61c7
BLAKE2b-256 317e234b7b080cbc3925596c5b595db27dd6c6c244822e5ba8a89dd100cf0ee2

See more details on using hashes here.

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

Hashes for valtdb-1.0.0-py3-none-any.whl
Algorithm Hash digest
SHA256 0da3be31e29f70e9a4ed08f84340d5a4508cdd81ee1ba473e4a799c1b1b22df9
MD5 3d8b5a614b0554b28a7894f3fe2970f4
BLAKE2b-256 f701a16feed40cf2e596cc7022bd5383c3b8116339077a920916f80e7ade8873

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page