Skip to main content

Python application

Q2DB: Lightweight Python DB API Wrapper & ORM

Q2DB is a lightweight Python library that wraps standard DB API connectors for MySQL, PostgreSQL, and SQLite, providing a simple ORM-like interface for database operations. It enables easy schema definition and migration, supports basic CRUD operations, and offers a convenient cursor abstraction for querying and manipulating data. Q2DB is designed for rapid prototyping, small projects, and educational purposes, focusing on simplicity and minimal configuration.

Key features include:

  • Unified API for MySQL, PostgreSQL, and SQLite
  • Schema definition and migration (ADD COLUMN only)
  • Simple ORM-like CRUD operations (insert, update, delete, get)
  • Foreign key checks and logging of changes
  • Cursor abstraction for flexible queries and record navigation
  • Docker support for quick setup and testing

Features:


Connect

from q2db.db import Q2Db

database_sqlite = Q2Db("sqlite3", database_name=":memory:")
# or just
database_sqlite = Q2Db()


database_mysql = Q2Db(
    "mysql",
    user="root",
    password="q2test"
    host="0.0.0.0",
    port="3308",
    database_name="q2test",
)
# or just
database_mysql = Q2Db(url="mysql://root:q2test@0.0.0.0:3308/q2test")

database_postgresql = Q2Db(
    "postgresql",
    user="q2user",
    password="q2test"
    host="0.0.0.0",
    port=5432,
    database_name="q2test1",
)

Define & migrate database schema (ADD COLUMN only).

q2db.schema import Q2DbSchema

schema = Q2DbSchema()

schema.add(table="topic_table", column="uid", datatype="int", datalen=9, pk=True)
schema.add(table="topic_table", column="name", datatype="varchar", datalen=100)

schema.add(table="message_table", column="uid", datatype="int", datalen=9, pk=True)
schema.add(table="message_table", column="message", datatype="varchar", datalen=100)
schema.add(
    table="message_table",
    column="parent_uid",
    to_table="topic_table",
    to_column="uid",
    related="name"
)

database.set_schema(schema)

INSERT, UPDATE, DELETE

database.insert("topic_table", {"name": "topic 0"})
database.insert("topic_table", {"name": "topic 1"})
database.insert("topic_table", {"name": "topic 2"})
database.insert("topic_table", {"name": "topic 3"})

database.insert("message_table", {"message": "Message 0 in 0", "parent_uid": 0})
database.insert("message_table", {"message": "Message 1 in 0", "parent_uid": 0})
database.insert("message_table", {"message": "Message 0 in 1", "parent_uid": 1})
database.insert("message_table", {"message": "Message 1 in 1", "parent_uid": 1})

# this returns False because there is no value 2 in topic_table.id - schema works!
database.insert("message_table", {"message": "Message 1 in 1", "parent_uid": 2})


database.delete("message_table", {"uid": 2})

database.update("message_table", {"uid": 0, "message": "updated message"})

Cursor

cursor = database.cursor(table_name="topic_table")
cursor = database.cursor(
    table_name="topic_table",
    where=" name like '%2%'",
    order="name desc"
)
cursor.insert({"name": "insert record via cursor"})
cursor.delete({"uid": 2})
cursor.update({"uid": 0, "message": "updated message"})

cursor = database.cursor(sql="select name from topic_table")

for x in cursor.records():
    print(x)
    print(cursor.r.name)

cursor.record(0)['name']
cursor.row_count()
cursor.first()
cursor.last()
cursor.next()
cursor.prev()
cursor.bof()
cursor.eof()

Metadata

Release files for q2db 0.1.71

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

Source distribution (sdist)

Source distribution for q2db 0.1.71
File Size Uploaded
q2db-0.1.71.tar.gz 24.1 kB Details

Built distribution (wheel)

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

Total release size: 50.5 kB

Release files / q2db-0.1.71.tar.gz

Download URL q2db-0.1.71.tar.gz
Size 24.1 kB
Tags Source
SHA-256 checksum
How to use checksums
a1d6a5387eb9eb256b9db178f39210b44bba0fe9f8e725d2e18615d983884a36
BLAKE2b-256 checksum
How to use checksums
d7b311fd14d439aee3a36fb14fb3a1c410c21ad3024ad19106c489b027159a9d
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via poetry/1.5.0 CPython/3.11.7 Windows/10

Release files / q2db-0.1.71-py3-none-any.whl

Download URL q2db-0.1.71-py3-none-any.whl
Size 26.4 kB
Tags Python 3
SHA-256 checksum
How to use checksums
930f8d2ff121c4e3386bdf37db07b2c1ba0e87317812b4c396fbc880697ba708
BLAKE2b-256 checksum
How to use checksums
7f9ecdccd2b2f6aa7cd78a67e8c5a07f82bd0fe732bf6143a5730d84315935a8
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via poetry/1.5.0 CPython/3.11.7 Windows/10

Release history Release notifications | RSS feed

0.1.74

2 release files

This release

0.1.71 This release

2 release files

0.1.70

2 release files

0.1.69

2 release files

0.1.68

2 release files

0.1.67

2 release files

0.1.66

2 release files

0.1.65

2 release files

0.1.64

2 release files

0.1.63

2 release files

0.1.62

2 release files

0.1.61

2 release files

0.1.60

2 release files

0.1.56

2 release files

0.1.55

2 release files

0.1.54

2 release files

0.1.53

2 release files

0.1.50

2 release files

0.1.49

2 release files

0.1.48

2 release files

0.1.47

2 release files

0.1.46

2 release files

0.1.45

2 release files

0.1.44

2 release files

0.1.43

2 release files

0.1.41

2 release files

0.1.38

2 release files

0.1.35

2 release files

0.1.34

2 release files

0.1.29

2 release files

0.1.28

2 release files

0.1.25

2 release files

0.1.24

2 release files

0.1.23

2 release files

0.1.18

2 release files

0.1.17

2 release files

0.1.16

2 release files

0.1.15

2 release files

0.1.14

2 release files

0.1.12

2 release files

0.1.11

2 release files

0.1.10

2 release files

0.1.9

2 release files

0.1.8

2 release files

0.1.7

2 release files

0.1.6

2 release files

0.1.5

2 release files

0.1.4

2 release files

0.1.2

2 release files

0.1.1

2 release files

0.1.0

2 release files

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