Skip to main content

dpyb

A simple, dependency-free, file-based Python database.

dpyb is a lightweight database that stores all its data in a single Python-readable file with the .dpyb.py extension. Every table is a plain Python dictionary, so you can read, inspect, and even version-control your database with Git.

  • Zero dependencies — only Python standard library
  • Human-readable format — data is stored as plain Python dicts
  • Automatic backups — every write operation creates a timestamped backup
  • Simple API — 13 functions, no classes to learn

Requirements

  • Python 3.12 or newer

Installation

pip install dpyb

Quick start

import dpyb

# Create a new database
dpyb.CreateDataBase("mydb")

# Add a table
dpyb.AddTableToDataBase("mydb", "users")

# Add rows
dpyb.AddRow("mydb", "users", {1: "Ali", 2: 25})
dpyb.AddRow("mydb", "users", {1: "Sara", 2: 30})

# Read a cell
print(dpyb.ReadData("mydb", "users", 1, 1))   # "Ali"

# Write a cell
dpyb.WriteData("mydb", "users", 1, 2, 26)

The file mydb.dpyb.py will look like this:

# a d-py-b database file, DO NOT EDIT THIS FILE
# d-py-b, a simple python database by darkstarshine2011

# ---

users = {1: {1: 'Ali', 2: 26}, 2: {1: 'Sara', 2: 30}}

Data model

A d-py-b database is a set of tables. Each table is a dictionary:

Table = {
    RowID: { ColumnID: Value, ColumnID: Value, ... },
    RowID: { ColumnID: Value, ColumnID: Value, ... },
}

Example:

users = {
    1: {1: "Ali",  2: 25, 3: "Tehran"},
    2: {1: "Sara", 2: 30, 3: "Shiraz"},
    3: {1: "Reza", 2: 40, 3: "Mashhad"},
}
  • Row IDs and Column IDs are integers.
  • Values can be any Python literal (str, int, float, bool, None, list, dict, tuple).

API Reference

GetDataBaseName(DataBaseFile)

Normalizes a database filename. Adds the .dpyb.py extension if missing.

dpyb.GetDataBaseName("mydb")        # "mydb.dpyb.py"
dpyb.GetDataBaseName("mydb.dpyb")   # "mydb.dpyb.py"

CreateDataBase(DataBaseFile)

Creates a new, empty database file. Overwrites the file if it already exists.

dpyb.CreateDataBase("mydb")

CreateBackup(DataBaseFile)

Creates a timestamped backup of the database in the Backup/ folder.

This is called automatically by every write operation, so you rarely need to call it manually.

AddTableToDataBase(DataBaseFile, TableName)

Adds a new empty table to the database. Does nothing if the table already exists.

dpyb.AddTableToDataBase("mydb", "users")

AddRow(DataBaseFile, TableName, Rows)

Adds a new row to the table. The row ID is assigned automatically.

dpyb.AddRow("mydb", "users", {1: "Ali", 2: 25, 3: "Tehran"})

AddColumn(DataBaseFile, TableName, DefaultValue="")

Adds a new column to every row of the table, filled with DefaultValue.

dpyb.AddColumn("mydb", "users", "unknown")

ReadData(DataBaseFile, TableName, Row, Column)

Returns the value of a single cell.

Name = dpyb.ReadData("mydb", "users", 1, 1)   # "Ali"

WriteData(DataBaseFile, TableName, Row, Column, Value)

Writes a value into a single cell.

dpyb.WriteData("mydb", "users", 1, 2, 26)

DeleteRow(DataBaseFile, TableName, Row)

Deletes a row from the table.

dpyb.DeleteRow("mydb", "users", 2)

DeleteColumn(DataBaseFile, TableName, Column)

Deletes a column from every row of the table.

dpyb.DeleteColumn("mydb", "users", 3)

DeleteTable(DataBaseFile, TableName)

Deletes an entire table from the database.

dpyb.DeleteTable("mydb", "users")

ListTables(DataBaseFile)

Returns a list of all table names.

dpyb.ListTables("mydb")   # ["users", "posts"]

GetTable(DataBaseFile, TableName)

Returns the entire table as a Python dictionary.

Users = dpyb.GetTable("mydb", "users")

Examples

Iterating over a table

import dpyb

dpyb.CreateDataBase("mydb")
dpyb.AddTableToDataBase("mydb", "users")
dpyb.AddRow("mydb", "users", {1: "Ali", 2: 25})
dpyb.AddRow("mydb", "users", {1: "Sara", 2: 30})

Users = dpyb.GetTable("mydb", "users")

for RowID in Users:
    Name = Users[RowID][1]
    Age = Users[RowID][2]
    print(f"Row {RowID}: {Name}, age {Age}")

Adding a column and filling it

dpyb.AddColumn("mydb", "users", 0)   # new column filled with 0

Users = dpyb.GetTable("mydb", "users")
for RowID in Users:
    dpyb.WriteData("mydb", "users", RowID, 3, "active")

Backups

Every write operation (AddRow, WriteData, DeleteRow, DeleteColumn, DeleteTable, AddTableToDataBase, AddColumn) creates a timestamped backup inside a Backup/ folder next to your script.

Backup/
├── 20261005_120000_123456.dpyb.py.backup
├── 20261005_120015_654321.dpyb.py.backup
└── ...

Read operations (ReadData, GetTable, ListTables) do not create backups.


Notes

  • Database files use the .dpyb.py extension and should not be edited by hand. They are valid Python files, but a wrong edit can break the parser.
  • d-py-b has zero external dependencies.
  • Not designed for concurrent writes. If multiple processes write to the same database at the same time, data loss may occur.
  • Not designed for large datasets. Every write reads and rewrites the entire file.

License

This project is licensed under the GNU Affero General Public License v3.0 or later (AGPL-3.0-or-later). See the LICENSE file for the full text.


Author

Made by darkstarshine2011

PyPI version

Metadata

Release files for dpyb 0.1.3

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for dpyb 0.1.3
File Size Uploaded Provenance Actions
dpyb-0.1.3.tar.gz 17.1 kB Without provenance Details for dpyb-0.1.3.tar.gz

Built distribution (wheel)

Table of built distributions (wheels) for dpyb 0.1.3
File Interpreter ABI Platform Actions
dpyb-0.1.3-py3-none-any.whl Python 3 none any Details for dpyb-0.1.3-py3-none-any.whl

Total release size: 34.4 kB

Release files / dpyb-0.1.3.tar.gz

Download URL dpyb-0.1.3.tar.gz
Size 17.1 kB
Tags Source
SHA-256 checksum
How to use checksums
7b9763fe97d60d80f31d3a45300198252e4455c08680d6111db804c42d9baaa3
BLAKE2b-256 checksum
How to use checksums
07cac76711547b3b7aa072905abf61814e6726fc1a1064b63844df2572d2f238
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.14.5

Release files / dpyb-0.1.3-py3-none-any.whl

Download URL dpyb-0.1.3-py3-none-any.whl
Size 17.3 kB
Tags Python 3
SHA-256 checksum
How to use checksums
82e74c2d0f3d3f705b3ed3c89f40491635d9f8e8f305a5c8ed35b04bec446924
BLAKE2b-256 checksum
How to use checksums
30e72d11fd2425e64d25a76896a1d6602075d12a3e767c7537fa226c5e475a04
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.14.5

Security for dpyb 0.1.3

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.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page